std::condition_variable的步骤如下:
1.创建一个 std::condition_variable 对象。
2.创建一个互斥锁std::mutex对象,用来保护共享资源的访问。
3.在需要等待条件变量的地方使用std::unique_lock<std::mutex>对象锁定互斥锁,并调用std::condition_variable::wait()、std::condition_variable::wait_ for()或std::condition_variable::wait_until()函数等待条件变量。
4.在其他线程中需要通知等待的线程时,调用std::condition_variable::notify_on e()或std::condition_variable::notify_al1()函数通知等待的线程。
#include<iostream>
#include<thread>
#include<mutex>
#include<condition_variable>
#include<queue>int shared_data = 0;
std::mutex mtx;
std::queue<int>q_queue;
std::condition_variable q_cv;void Productor(){for(i=0;i<10;i++){ std::unique_lock<std::mutex>lock(mtx);q_queue.push(i);//通知消费者来取g_cv.notify_one()std:;cout<<"Productor:"<<i<<std::endl;} std::thid_thread::sleep_for(std::chrono::microseconds(100));}void Consumer(){//如果队列为空,等待while(1){ std::queue_lock<std::mutex>lock(mtx);bool isempty = q_queue.empty();q_cv.wait(lock,[](){return !q_queue.empty();});int value = q_queue.front();q_queue.pop();std:;cout<<"Consumer:"<<i<<std::endl;}
}int main()
{std::thread t1(Productor);std::thread t2(Productor);t1.join();t2.join();std::cout<< " " <<std::endl;return 0;
}