c++11 并发 条件变量 超时等待的代码练习
资料地址
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 并发 条件变量 超时等待的代码练习的更多相关文章
- Go语言协程并发---条件变量
package main import ( "fmt" "sync" "time" ) func main() { //要监听的变量 bit ...
- Windows:C++11并发编程-条件变量(condition_variable)详解
<condition_variable >头文件主要包含了与条件变量相关的类和函数.相关的类包括 std::condition_variable和 std::condition_varia ...
- C++11并行编程-条件变量(condition_variable)详细说明
<condition_variable >头文件主要包含有类和函数相关的条件变量. 包括相关类 std::condition_variable和 std::condition_variab ...
- C++11 并发指南五(std::condition_variable 详解)
前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread,std::mut ...
- 转 C++11 并发指南std::condition_variable详解
之前看过,但是一直没有怎么用就忘了,转一篇别人的文字记录下来 本文将介绍 C++11 标准中 <condition_variable> 头文件里面的类和相关函数. <conditio ...
- C++11 并发指南五(std::condition_variable 详解)(转)
前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread,std::mut ...
- 【转】C++11 并发指南五(std::condition_variable 详解)
http://www.cnblogs.com/haippy/p/3252041.html 前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三 ...
- C++11 并发编程库
C++11 并发编程 C++11 新标准中引入了几个头文件来支持多线程编程,他们分别是: <atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_f ...
- Linux多线程编程详细解析----条件变量 pthread_cond_t
Linux操作系统下的多线程编程详细解析----条件变量 1.初始化条件变量pthread_cond_init #include <pthread.h> int pthread_cond_ ...
随机推荐
- spring boot springmvc视图
pring boot 在springmvc的视图解析器方面就默认集成了ContentNegotiatingViewResolver和BeanNameViewResolver,在视图引擎上就已经集成自动 ...
- iostat磁盘监控工具
安装iostat磁盘监控工具 1.安装 yum install sysstat 2.运行 iostat -k -d -x 1 10 -k:以kb为单位统计 -d:显示磁盘状态 -x:显示详细信息 1: ...
- python网络编程之开启进程的方式
标签(空格分隔): 开启进程的方式 multiprocessing模块介绍: python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在pyth ...
- javascript学习笔记(九):DOM操作HTML的各种方法使用
<!DOCTYPE html> <html> <head lang="en"> <meta chaset="UTF-8" ...
- Integer 原码解读
有一天,突然发现,阅读原码可以发现很多有趣的东西.在Java中,我们知道很多东西都是封装好的,拿来即用,当你有一天去研究它拿来的东西是如何具体操作的,将会是非常有趣的事情. 在上一篇研究HashMap ...
- ucore-lab1-练习2report
练习二实验报告 1.从CPU加电后执行的第一条指令开始,单步跟踪BIOS: 1.1默认的gdb需要进行一些额外的配置才能进行qemu的调试任务,qemu和gdb之间使用网络端口1234进行通信. la ...
- APIView和View的区别
APIView和View的区别 API继承了View 重写了as_view方法 --豁免csrf def dispatch(self, request, *args, **kwargs): self. ...
- 前端、数据库、Django简单的练习
一.前端 1.前端页面由哪几层构成,分别是什么,作用是什么? 分为:结构层(html),表示层(css),行为层(js). 结构层 超文本标记语言.由HTML或XHTML之类的标记语言负责创建.标签, ...
- 牛客练习赛15A-吉姆的运算式(Python正则表达式瞎搞)
传送门 题意:出现的数字,取最后一个数字即可. Python正则表达式提取数字 代码: import re str = input() a = re.findall(r'\-*\d+(?:\.\d+) ...
- TOJ 3973 Maze Again && TOJ 3128 简单版贪吃蛇
TOJ3973传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3973 时间限制(普通 ...