资料地址

http://en.cppreference.com/w/cpp/thread/condition_variable/wait_until

http://www.cnblogs.com/haippy/p/3252041.html

 // asdasdwa.cpp: 定义控制台应用程序的入口点。
// #include "stdafx.h" #include <mutex> // std::mutex, std::unique_lock
#include <iostream>
#include <string>
#include <atomic>
#include <condition_variable>
#include <thread>
#include <chrono>
#include <vector> #include <windows.h>
using namespace std::chrono_literals; /*
作 者: itdef 欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
技术交流群 群号码:324164944
欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
部分老代码存放地点 http://www.oschina.net/code/list_by_user?id=614253
*/ std::condition_variable cv;
std::mutex mtx;
std::vector<std::string> messageVec; std::atomic<int> i; void SingalFunc() {
std::lock_guard<std::mutex> lock(mtx);
messageVec.push_back("1234567890test.hello world!");
std::cout << "push" << std::endl;
cv.notify_one();
} void WaitTimeOutFunc1()
{
while()
{
std::unique_lock<std::mutex> lck(mtx);
auto now = std::chrono::system_clock::now();
if (cv.wait_until(lck, now + 2s, []() {return !messageVec.empty(); })) {
std::cerr << "Thread " << " finished waiting. " << std::endl;
messageVec.pop_back();
}
else {
std::cerr << "Thread " << " timed out." << std::endl;
return;
}
}
} void WaitTimeOutFunc()
{
while()
{
std::unique_lock<std::mutex> lck(mtx);
std::cv_status status = std::cv_status::timeout;
auto now = std::chrono::system_clock::now();
while (messageVec.empty()) {
status = cv.wait_until(lck, now + 1s);
if (status == std::cv_status::timeout) {
std::cout << i << " timeout" << std::endl;
return;
}
} i.fetch_add();
std::cout << i << " no_timeout" << std::endl;
// std::cout << messageVec.back() << std::endl;
messageVec.pop_back();
}
return;
} int main()
{
std::thread t[];
for (int i = ; i < ; i++) {
SingalFunc();
}
for (int i = ; i <; i++) {
t[i] = std::thread(WaitTimeOutFunc);
} //for (int i = 0; i < 5000; i++) {
// SingalFunc();
//} for (int i = ; i < ; i++) {
t[i].join();
} return ;
}

c++11 并发 条件变量 超时等待的代码练习的更多相关文章

  1. Go语言协程并发---条件变量

    package main import ( "fmt" "sync" "time" ) func main() { //要监听的变量 bit ...

  2. Windows:C++11并发编程-条件变量(condition_variable)详解

    <condition_variable >头文件主要包含了与条件变量相关的类和函数.相关的类包括 std::condition_variable和 std::condition_varia ...

  3. C++11并行编程-条件变量(condition_variable)详细说明

    <condition_variable >头文件主要包含有类和函数相关的条件变量. 包括相关类 std::condition_variable和 std::condition_variab ...

  4. C++11 并发指南五(std::condition_variable 详解)

    前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread,std::mut ...

  5. 转 C++11 并发指南std::condition_variable详解

    之前看过,但是一直没有怎么用就忘了,转一篇别人的文字记录下来 本文将介绍 C++11 标准中 <condition_variable> 头文件里面的类和相关函数. <conditio ...

  6. C++11 并发指南五(std::condition_variable 详解)(转)

    前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread,std::mut ...

  7. 【转】C++11 并发指南五(std::condition_variable 详解)

    http://www.cnblogs.com/haippy/p/3252041.html 前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三 ...

  8. C++11 并发编程库

    C++11 并发编程 C++11 新标准中引入了几个头文件来支持多线程编程,他们分别是: <atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_f ...

  9. Linux多线程编程详细解析----条件变量 pthread_cond_t

    Linux操作系统下的多线程编程详细解析----条件变量 1.初始化条件变量pthread_cond_init #include <pthread.h> int pthread_cond_ ...

随机推荐

  1. Numpy:ndarray数据类型和运算

    Numpy的ndarray:一种多维数组对象 N维数组对象,该对象是一个快速而灵活的大数据集容器,nadarry是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的.每个数组都有一个 ...

  2. 用PLSQL Developer 查看连接因子 tnsnames.ora

    1 2

  3. getHibernateTemplate()的用法 (转)

    在spring 中获得由spring所配置的hibernate的操作对象,然后利用此对象进行,保存,修改和删除等操作, 此方法是在配置了spring以后,hibernate由spring接管,不直接使 ...

  4. MyBufferedReader

    /** 需求:自定义一个包含 readLine 方法的 BufferedReader 来模拟一下 BufferedReader */ import java.io.FileReader; import ...

  5. python基础入门学习简单程序练习

    1.简单的乘法程序 i = 256*256 print('The value of i is', i) 运行结果: The value of i is 65536 2.执行python脚本的两种方式 ...

  6. poj2912(带权并查集+枚举)

    题目链接:http://poj.org/problem?id=2912 题意:给n个人,m组关系,玩石头剪刀布的游戏,n个人中除一个人judge以外,其他人属于3个group(即石头.剪刀.布),他们 ...

  7. 第三章 列表(b)无序列表

  8. CentOS 7 单用户模式+救援模式

    CentOS 7 单用户模式+救援模式 CentOS 7 单用户模式+救援模式.有时候大家可能会忘记自己的root密码,或者错误(命令输入错误,命令位置输入有误等)编辑了一个/etc目录下的核心文件导 ...

  9. Android 性能测试之CPU

    接上一篇 CPU跟内存一样,存在一些测试子项,如下清单所示 1.空闲状态下的应用CPU消耗情况 2.中等规格状态下的应用CPU消耗情况 3.满规格状态下的应用CPU消耗情况 4.应用CPU峰值情况 C ...

  10. vue router返回上一页

    this.$router.go(-1) 不用router时,使用window.history.go(-1);