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;
}