条件变量顾名思义 , 使用条件触发改变的变量。当某个线程当前执行的操作需要其他的另外一个线程的操作完成之后 , 当前线程才具备该操作 , 那么当前线程就需要等待执行另外操作的线程执行完成以后,再执行当前的操作。在此环境下 , 条件变量就是排上用途了。
直接上代码,看操作:
#include <iostream> #include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
std::mutex mtx;
std::condition_variable cv;
int tmpVar = 0;
void exchage_variable()
{
std::lock_guard<std::mutex> tmp_lock(mtx); //创建自动互斥
tmpVar = 1; //共享资源写入数据
cv.notify_one(); //共享资源写入数据后 通知唤醒线程
}
void print_variable()
{
std::unique_lock <std::mutex> lk(mtx); //创建自动互斥
cv.wait(lk); //阻塞当前线程 , 等待线程被唤醒
cout<< tmpVar<<endl; //线程被唤醒后输出共享资源中的数据
}
int main( )
{
std::thread t2(print_variable); //创建线程 t1 并启动该线程
std::thread t1(exchage_variable); //创建线程 t2 并启动该线程
t1.join();
t2.join();
}
以上是最基本的条件变量操作。