资料地址

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. Frame animation

    [Frame animation] An animation defined in XML that shows a sequence of images in order (like a film) ...

  2. sql根据最小值去重

    CREATE TABLE temp2 AS SELECT MAX(id) id FROM sys_oper_procenter GROUP BY pro_title 创建一个temp2的表 根据标题分 ...

  3. 齐博CMS:最常用的一些变量名,方便二次开发.必须要熟悉的

    ROOT_PATH程序所在硬盘目录的绝对地址,等同于以前的PHP168_PATH$webdb网站的全局变量,模块的全局变量也是这个$onlineip当前用户的IP$timestamp当前时间$WEBU ...

  4. apache服务器伪静态配置说明

    apache服务器伪静态配置说明: 第一种 .如果是多城市版分类并且使用了城市二级域名即(多城市+多域名),请修改apache的配置文件,把以下代码添加到配置文件的最后一行即可,注意把qibosoft ...

  5. mac item2 ssh

    一.常规ssh登录流程 ssh登陆有三个参数,主机名,用户名,用户密码,流程都是一样. 1.ssh 用户名@主机名 2.返回包含(yes/no)的字符串,此时输入 “yes" 3.然后再返回 ...

  6. Inno Setup界面拉伸

    1.源起: 源于一个安装包的广告定制.广告客服提供的图片太大,inno setup默认尺寸容不下它,需要扩充,拉宽安装界面尺寸. 以inno setup所附带例子说事,其默认尺寸如下: 2.Scale ...

  7. ajax POST跨域请求完美解决

    方式: js前端请求: function getOcrInfo(imageData){$.ajax({   url: 'http://localhost:8080/LSWS/ws/ocr/getWeb ...

  8. SQL Server 触发器 表的特定字段(一个字段)更新时,触发Update触发器

    CREATE TRIGGER [dbo].[Trg_Update_table1_column1]   on table1  after update  as  if update (column1)  ...

  9. JNI开发篇——报错:Flag android.useDeprecatedNdk is no longer supported and will be removed in the next……

    大概意思就是说: android.useDeprecatedNdk不再支持了 让使用CMake or ndk-build 然后还有链接 解决方法: 1.先通过SDKManager下载:CMake和LL ...

  10. CentOS 6、7 安装 Golang

    方法一:使用二进制文件安装 (推荐) 1.下载二进制文件: wget https://storage.googleapis.com/golang/go1.7.3.linux-amd64.tar.gz ...