#include <iostream>                // std::cout
#include <thread> // std::thread
#include <mutex> // std::mutex, std::unique_lock
#include <condition_variable> // std::condition_variable std::mutex mtx;
std::condition_variable cv; int cargo = ; // shared value by producers and consumers void consumer()
{
std::unique_lock < std::mutex > lck(mtx);
while (cargo == )
cv.wait(lck);
std::cout << cargo << '\n';
cargo = ;
} void producer(int id)
{
std::unique_lock < std::mutex > lck(mtx);
cargo = id;
cv.notify_one();//如果存在多个等待唤醒的线程则唤醒的线程时不确定的
} int main()
{
std::thread consumers[], producers[];
  //多个生产者,多个消费者,只要加锁还是安全的
// spawn 10 consumers and 10 producers:
for (int i = ; i < ; ++i) {
consumers[i] = std::thread(consumer);//消费者线程
producers[i] = std::thread(producer, i + );//生产者线程
} // join them back:
for (int i = ; i < ; ++i) {
producers[i].join();
consumers[i].join();
}
getchar();
return ;
}

通常std::condition_variable使用std::unique_lock锁住线程,如果使用其的可以用std::condition_variable_any

最新文章

  1. XmlSerializer 对象的Xml序列化和反序列化
  2. (视频) 《快速创建网站》2.1 在Azure上创建网站及网站运行机制
  3. JQuery 表单校验插件 validate 使用纪录
  4. c# ConfigurationSection
  5. nenu contest
  6. 怎么在centos中查看某个目录的树结构?
  7. Mysql安装时出现APPLY security settings错误
  8. Oracle 数据迁移(从Oracle11G迁移到更高的版本号Oracle10G低版本号)
  9. 通用Adapter设计,SparseArray+泛型+回调的使用
  10. Hadoop 发行版本 Hortonworks 安装详解(一) 准备工作
  11. JAVA_SE基础——58.如何用jar命令对java工程进行打包
  12. 测试AtomicInteger与普通int值在多线程下的递增操作
  13. NFS部署文件共享
  14. mysql官方测试库
  15. jsp页面上的下拉框案例(Struts2)
  16. MongoDB学习记录(四) - MongoDB的&quot;增查改删&quot;操作之&quot;改&quot;
  17. mysql查询反斜杠字符串问题
  18. Java代码中获取Json的key值
  19. linux 3.10 的中断收包笔记
  20. RAPID程序设计

热门文章

  1. 基于Spring开发的DUBBO服务接口测试
  2. Python——实现代理服务功能
  3. UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
  4. (五)EasyUI使用——datagrid数据表格
  5. Autofc与Mvc,WebForm,Weiapi,Owin整合源码分析
  6. LeetCode 66 Plus One(加一)(vector)
  7. php中的正则表达式
  8. table行编辑
  9. 在iis6里使用没有扩展名的mvc
  10. sql语句优化技巧