从windows角度来说,condition_variable类似event。

阻塞等待出发,不过condition_variable可以批量出发。

代码如下:

// 1111111.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable> std::mutex gmtx;
std::condition_variable gcv;
bool gready = false; void do_print_id(int id)
{
std::unique_lock<std::mutex> lock(gmtx);
while (!gready)
gcv.wait(lock);
std::cout << "thread " << id << std::endl;
} void go()
{
std::unique_lock<std::mutex> lock(gmtx);
gready = true;
gcv.notify_all();
} int _tmain(int argc, _TCHAR* argv[])
{
std::thread thread[];
for (int i = ; i < ; ++i)
thread[i] = std::thread(do_print_id, i); std::cout << "start..." << std::endl;
//触发激活
go(); //等待线程结束执行
for (auto & th : thread)
th.join(); return ;
}

显示如下:

start...
thread 7
thread 3
thread 2
thread 9
thread 6
thread 5
thread 1
thread 0
thread 4
thread 8
请按任意键继续. . .

#pragma once
// 参考http://www.cnblogs.com/qicosmos/archive/2013/05/30/3107975.html
#include <thread>
#include <condition_variable>
#include <mutex>
#include <list>
#include <iostream>

using namespace std;

template<typename T>
class SimpleSyncQueue {
public:
void PutWithLock(const T& x)
{
std::lock_guard<std::mutex> locker(m_mutex);
m_queue.emplace_back(x);
m_notEmpty.notify_one();
}
template<typename U>
void PutWithLock(const T&& x)
{
std::lock_guard<std::mutex> locker(m_mutex);
m_queue.emplace_back(std::forward<U>(x));
m_notEmpty.notify_one();
}
void PopWithLock(T& x)
{
std::unique_lock<std::mutex> locker(m_mutex);
while (m_queue.empty())
m_notEmpty.wait(locker);
x = m_queue.front();
m_queue.pop_front();
}
private:
std::list<T> m_queue;
std::mutex m_mutex;
std::condition_variable m_notEmpty;
};

最新文章

  1. 如何利用 Visual Studio 自定义项目或工程模板
  2. 贪吃蛇的java代码分析(二)
  3. Spring JDBC实现查询
  4. 值得使用的Spring Boot
  5. Linux下安装Nginx服务器
  6. C# 正则表达式及常用正则表达式
  7. ConcurrentHashMap使用示例
  8. java常用string inputStream转换
  9. (转载)equals与==
  10. Windows Phone 8初学者开发—第2部分:安装Windows Phone SDK 8.0
  11. Description Resource Path Location Type AndroidManifest.xml file missing!
  12. asp.net core系列 51 Identity 授权(下)
  13. QPalette
  14. Git里有些费解的术语和设计
  15. Android判断网络是否打开,并打开设置网络界面
  16. Freemarker出现NullNumberException异常
  17. Cadence丢失了csdCommon.dll
  18. Spring Boot&mdash;10ModelAndView、Model,以及@ModelAttribute注解
  19. HTML5实战与剖析之字符集属性(charset和defaultCharset)
  20. spark[源码]-DAG调度器源码分析[二]

热门文章

  1. multiprocess模块---进程---进程队列
  2. centos7.3给squid搭建代理服务器添加认证apache
  3. leetcode405
  4. bat 笔记 二
  5. Linux&amp;Unix命令
  6. Simple2D-23(重构)反走样几何图形
  7. python list()总结
  8. 安卓上为什么不能用system.io.file读取streammingAssets目录下的文件
  9. Java中的默认构造函数
  10. 30分钟新手git教程