std::thread 二:互斥量(带超时的互斥量 timed_mutex())
timed_mutex 、 try_lock_for 、 try_lock_until
#include <iostream>
#include <thread>
#include <mutex>
#include <list>
using namespace std; class A
{
public:
void inNum()
{
for (int i = 0; i < 10000; i++)
{
std::cout << "写入一个数据:" << i << std::endl; // try_lock_for 和 try_lock_until 的作用是一样的
std::chrono::microseconds timeOut(100);
if (m_mutex.try_lock_for(timeOut))
{
// 100ms内拿到了锁
m_num_list.push_back(i);
m_mutex.unlock();
}
else
{
std::this_thread::sleep_for(timeOut);
} }
} void outNum()
{
int command = 0;
while (true)
{
std::chrono::microseconds timeOut(100);
if (m_mutex.try_lock_until(std::chrono::steady_clock::now() + timeOut))
{
if (m_num_list.empty())
{
m_mutex.unlock();
continue;
} command = m_num_list.front();
m_num_list.pop_front();
m_mutex.unlock();
std::cout << "读取到数据了:" << command << std::endl;
}
else
{
std::this_thread::sleep_for(timeOut);
} if (command == 9999) { break; }
}
} private:
std::timed_mutex m_mutex;
std::list<int> m_num_list;
}; int main()
{
// 创建对象
A a;
std::thread t1(&A::inNum, &a);
std::thread t2(&A::outNum, &a); t1.join();
t2.join(); return 0;
}
std::thread 二:互斥量(带超时的互斥量 timed_mutex())的更多相关文章
- mingw-w64线程模型:posix vs win32(posix允许使用c++11的std:: thread,但要带一个winpthreads,可能需要额外dll)
我正在安装 mingw-w64 on Windows,有两个选项: win32线程和posix线程. 我知道win32线程和pthreads之间的区别,但是我不明白这两个选项之间的区别. 我怀疑如果我 ...
- [转]一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程
一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程 希望此文能给初学多线程编程的朋友带来帮助,也希望牛人多多指出错误. 另外感谢以下链接的作者给予,给我的学习带来了很大帮助 http ...
- Cocos2dx 3.0 过渡篇(二十六)C++11多线程std::thread的简单使用(上)
昨天练车时有一MM与我交替着练,聊了几句话就多了起来,我对她说:"看到前面那俩教练没?老色鬼两枚!整天调戏女学员."她说:"还好啦,这毕竟是他们的乐趣所在,你不认为教练每 ...
- Cocos2dx 3.0 过渡篇(二十七)C++11多线程std::thread的简单使用(下)
本篇接上篇继续讲:上篇传送门:http://blog.csdn.net/star530/article/details/24186783 简单的东西我都说的几乎相同了,想挖点深的差点把自己给填进去. ...
- C++11 并发指南二(std::thread 详解)
上一篇博客<C++11 并发指南一(C++11 多线程初探)>中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用 ...
- C++11 并发指南二(std::thread 详解)(转)
上一篇博客<C++11 并发指南一(C++11 多线程初探)>中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用 ...
- 【C/C++开发】C++11 并发指南二(std::thread 详解)
上一篇博客<C++11 并发指南一(C++11 多线程初探)>中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用 ...
- C++ 11 笔记 (五) : std::thread
这真是一个巨大的话题.我猜记录完善绝B需要一本书的容量. 所以..我只是略有了解,等以后用的深入了再慢慢补充吧. C++写多线程真是一个痛苦的事情,当初用过C语言的CreateThread,见过boo ...
- std::thread线程库详解(2)
目录 目录 简介 最基本的锁 std::mutex 使用 方法和属性 递归锁 std::recursive_mutex 共享锁 std::shared_mutex (C++17) 带超时的锁 总结 简 ...
- C++11多线程std::thread的简单使用
在cocos2dx 2.0时代,我们使用的是pthread库,是一套用户级线程库,被广泛地使用在跨平台应用上.但在cocos2dx 3.0中并未发现有pthread的支持文件,原来c++11中已经拥有 ...
随机推荐
- 【Azure 事件中心】EventHub 中同一条消息不停的推送给消费端问题记录
问题描述 EventHub 中同一条消息,不停的推送给消费端,查看日志发现错误: Caused by: com.azure.messaging.eventhubs.implementation.Par ...
- 【规范】Apifox就应该这么玩
前言 缘由 好的工具就要配好的玩法 起因是最近在回顾项目时,看到了年事已高并且长时间不用的Postman,发现之前自己整理的接口文档十分混乱且没有规律.遂打开现在使用的Apifox,将本狗目前项目中使 ...
- Java 常用类 String类与其他结构之间的转换-----String 与 byte[]之间的转换
1 /** 2 * 3 * String 与 byte[]之间的转换 4 * 编码:String ---> byte[]:调用String的getBytes() 5 * 解码:byte[]--- ...
- Codeforces Round 303 (Div. 2)C. Kefa and Park(DFS、实现)
@ 目录 题面 链接 题意 题解 代码 总结 题面 链接 C. Kefa and Park 题意 求叶节点数量,叶节点满足,从根节点到叶节点的路径上最长连续1的长度小于m 题解 这道题目主要是实现,当 ...
- Lambda表达式(匿名函数)
C++11中引入了lambda表达式,定义匿名的内联函数. 我们可以直接原地定义函数而不用再跑到外面去定义函数跳来跳去. 同时在stl的排序上也有作用. [capture] (parameters) ...
- python 读取txt并绘制波形图实例解析
一 用python绘图有很多方法,笔者找到了一种最简单的方法,使用非常便利,这里分享一下: import numpy as np import matplotlib.pyplot as plt a = ...
- idea提交时候忽略改动部分文件
之前因为本地开发环境和线上开发环境有区别,bootstrap.xml里的log存放位置在我本地mac不存在路径,我就只能通过修改log路径才能让项目跑起来.但是,本地修改的东西每次commit时候都显 ...
- 什么会导致JAVA应用程序的CPU使用率飙升
问题 无限循环的while会导致CPU使用率飙升吗? 经常使用Young GC会导致CPU占用率飙升吗? 具有大量线程的应用程序的CPU使用率是否较高? CPU使用率高的应用程序的线程数是多少? 处于 ...
- Android 开发Day2
我的是小刺猬版本,算是比较新的版本了,还有火烈鸟和蜻蜓版啥的 新建项目(project)点击加号新建就行了.这时我们会选择一个模板作为开发的辅助起点,看上哪个就选哪个就行了.推荐新手选空项目(Empt ...
- 云游长江大桥,3DCAT实时云渲染助力打造沉浸化数字文旅平台
南京长江大桥是中国第一座自主设计建造的双层公路铁路桥,也是世界上最早的双层公路铁路桥之一.它不仅是一座桥梁,更是一座历史文化的见证者和传承者.它见证了中国人民的智慧和奋斗,承载了中国社会的变迁和发展. ...