版权声明:本文为灿哥哥http://blog.csdn.net/caoshangpa原创文章,转载请标明出处。 https://blog.csdn.net/caoshangpa/article/details/80393644
这里使用C++11的线程语法来实现,一个线程打印A,一个线程打印B,交替进行。
#include <thread>
#include <iostream>
#include <mutex>
#include <condition_variable>
std::mutex data_mutex;
std::condition_variable data_var;
bool flag = true;
void printA()
{
while(1)
{
std::this_thread::sleep_for(std::chrono::seconds(1));
std::unique_lock<std::mutex> lck(data_mutex) ;
data_var.wait(lck,[]{return flag;});
std::cout<<"thread: "<< std::this_thread::get_id() << " printf: " << "A" <<std::endl;
flag = false;
data_var.notify_one();
}
}
void printB()
{
while(1)
{
std::unique_lock<std::mutex> lck(data_mutex) ;
data_var.wait(lck,[]{return !flag;});
std::cout<<"thread: "<< std::this_thread::get_id() << " printf: " << "B" <<std::endl;
flag = true;
data_var.notify_one();
}
}
int main()
{
std::thread tA(printA);
std::thread tB(printB);
tA.join();
tB.join();
return 0;
}
这个相当于始终只生产一个产品的生产者和消费者模型,关于C++11实现的生产者和消费者,详见: