c++ condition_variable用法
condition_variable是C++11中实现线程同步的基本工具之一。它的作用是使线程等待某个条件变量的满足,当条件变量满足时,线程会被唤醒继续执行。
condition_variable定义在头文件<condition_variable>中,其主要包含以下两个功能:
1. 等待条件变量满足:调用condition_variable的wait()函数可以使当前线程等待条件变量的满足,并且将线程阻塞在此处,直到被唤醒。该函数需要传入一个unique_lock对象,并在等待期间自动解锁该对象,从而允许其他线程修改共享资源。使用wait()函数需要注意以下几点:
(1)必须要在持有该unique_lock对象的情况下调用wait()函数。
(2)wait()函数被唤醒后需要重新加锁unique_lock对象以继续执行。
2. 唤醒等待线程:条件变量的满足需要在某个时刻由其他线程来控制,并唤醒正在等待的线程。调用condition_variable的notify_one()函数可以唤醒至少一个正在等待的线程,如果没有等待线程则该函数不会起作用。另一个notify_all()函数可以唤醒所有正在等待的线程。
使用condition_variable时需要注意以下几点:
(1)条件变量必须和某个互斥锁配合使用,以确保线程安全。
(2)必须使用unique_lock来锁定互斥锁。在使用condition_variable的wait()函数时,该函数会自动解锁unique_lock对象,然后阻塞该线程,当该线程被唤醒后会重新上锁unique_lock对象,并继续执行该线程。
以下是一个使用condition_variable的示例代码:
```
#include <iostream>
#include <thread>
跑堂者#include <mutex>cha
#include <condition_variable>
石家庄北大青鸟>商务英语学习课程 using namespace std;
mutex m;
condition_variable cv;
autsbool flag = fal;
大饱眼福的意思 void consumer()
{
unique_lock<mutex> lk(m);
cout << "Consumer: waiting" << endl;
cv.wait(lk, []{ return flag; });
cout << "Consumer: done" << endl;
}
void producer()
{
unique_lock<mutex> lk(m);
cout << "Producer: working" << endl;
flag = true;
6 1儿童节手抄报 lk.unlock();
cv.notify_one();
}
int main()
{
learn的近义词
thread c(consumer);
thread p(producer);
c.join();
p.join();
手机英语学习软件免费下载 return 0;
}
```
上述代码中,线程consumer调用wait()函数进入等待状态,直到线程producer将flag设置为true并调用notify_one()函数唤醒等待线程。在唤醒后,consumer线程会重新上锁unique_lock对象,并继续执行线程。
初四英语