什么是条件变量?
条件变量是一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足。条件变量上的基本操作有:触发条件(当条件变为 true 时);等待条件,挂起线程直到其他线程触发条件。条件变量要和互斥量相联结,以避免出现条件竞争--一个线程预备等待一个条件变量,当它在真正进入等待之前,另一个线程恰好触发了该条件。
什么意思呢?不清楚没关系。看了例子就知道了:问题描述:假设有一个bool型全局变量 isTrue ,现有10个线程,线程流程如下:当isTrue为真时,doSomething;否则挂起线程,直到条件满足。那么,用thread和mutex如何实现这个功能呢?
#include <vector>
#include <iostream>
#include <thread>
#include <mutex>
#include <chrono>
using namespace std;
bool isTrue = false;
void doSomething()
{
cout << "this is : " << this_thread::get_id() << endl;
}
void thread_Func()
{
while (!isTrue)
this_thread::yield();
doSomething();
}
int main()
{
vector<thread> v;
v.reserve(10);
for (int i = 0; i < 10; i++)
{
v.emplace_