#include <iostream>                // std::cout
#include <thread> // std::thread, std::this_thread::yield
#include <mutex> // std::mutex, std::unique_lock
#include <condition_variable> // std::condition_variable std::mutex mtx;
std::condition_variable cv; int cargo = ;
bool shipment_available()
{
return cargo != ;
} // 消费者线程.
void consume(int n)
{
for (int i = ; i < n; ++i) {
std::unique_lock <std::mutex> lck(mtx);
cv.wait(lck, shipment_available);//当返回false时阻塞,当true时解除阻塞
std::cout << cargo << '\n';
cargo = ;
}
} int main()
{
std::thread consumer_thread(consume, ); // 消费者线程. // 主线程为生产者线程, 生产 10 个物品.
for (int i = ; i < ; ++i)
{
while (shipment_available())//等待消费者把cargo置成0
std::this_thread::yield();//相当于sleep一下
std::unique_lock <std::mutex> lck(mtx);
cargo = i + ;
cv.notify_one();//唤醒一个阻塞的线程
} consumer_thread.join();
getchar();
return ;
}

最新文章

  1. hadoop.home.dir is not set
  2. Swift - 键盘弹出样式
  3. Linux上部署JProbe
  4. 转 mv 管道符
  5. VS2013的virtualpath在当前应用程序根的外部
  6. em和rem及rem在移动的应用
  7. wifi热点共享 3G网络
  8. Python - 多元组(tuple)
  9. socket实例2
  10. vue打开新页面
  11. ApplicationListener详解
  12. 洗礼灵魂,修炼python(89)-- 知识拾遗篇 —— 进程
  13. Django适合做大用户量的系统吗?
  14. jq的error
  15. CSS 随笔
  16. POJ1094——拓扑排序和它的唯一性
  17. expect 交互 模拟ssh 登陆
  18. C 语言与动态库相关基础知识
  19. LZO压缩算法64位崩溃问题
  20. 【NLP】新词发现

热门文章

  1. 分页 返回 json格式数据
  2. xunsearch使用namespace后bug修复
  3. 微信小程序 - 表单验证插件WxValidate(自定义警告信息形式)
  4. 使用 curl() 函数实现不同站点之间注册用户的同步
  5. java filter、listener、servlet
  6. RabbitMQ消息队基本概念
  7. javascript - Underscore 与 函数式编程
  8. JQuery最佳实践及常见错误(转自 简书)
  9. 图像视频编码和FFmpeg(2)-----YUV格式介绍和应用
  10. opencv模块介绍