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中已经拥有 ...
随机推荐
- 今日问题——无法获取到input的value值
利用node环境开发系统,样式框架采用bootstrap,其中表单值可以提交到到后台,在数据库中也可查看,但是前端做表单判定的 时候发现无法获取其value值,所有input提交值都为空,判定问题出现 ...
- MacOS安装多个jdk
环境 Mac os 为Yosemite 10.10.5版本,想要同时使用jdk7和jdk8. 下载jdk:http://www.Oracle.com/technetwork/Java/javase/d ...
- 【Azure Notification Hub】如何手动删除 Notification Hub 中已注册的设备
问题描述 在Notification Hub中注册了设备后,从Azure门户上没有找到相应的入口来删除已注册设备 (Active Devices) 如果使用C# SDK是否有办法删除呢? 问题解答 可 ...
- 【Azure Function App】如何修改Azure函数应用的默认页面呢?
问题描述 当在Azure中创建了一个函数应用(Function App)后,访问默认URL会得到一个默认的页面.是否有办法修改这个默认页面呢? 问题解答 在之前的博文中,介绍了修改App Servic ...
- 使用beyond compare或kompare作为git的对比、合并工具
两种方法 方法1: 直接使用命令 # 执行下面命令,参看支持对比合并工具名称,比如bc就是指beyond compare(收费软件,推荐使用开源的kompare) $ git difftool --t ...
- Dungeon Master 题解
这道题的题意简单来说:就是在3D迷宫里找出口,也就是三维地图,需要用到三维数组 由于本人写代码极易出错,所以在输入三维数组的时候修改了c(column,即列)的值,重复定义了没看到==,后面改成定义成 ...
- 手把手带你认识GaussDB轻量化运维管理工具
本文分享自华为云社区<GaussDB轻量化运维管理工具介绍>,作者: Gauss松鼠会小助手. 一.GaussDB 运维管理平台简介 开放生态层 友好Web界面,多云皮肤个性化定制 丰富的 ...
- centos 磁盘满
1.使用命令:df -lk 找到已满磁盘 2.使用命令:du --max-depth=1 -h 查找大文件,删除
- Zabbix6.0使用教程 (二)—zabbix6.0常用术语
上一次我们已经详细介绍了zabbix6.0的新增功能,本篇我们来说说zabbix6.0常用的一些术语,这个对小伙伴日常使用zabbix的时候还是非常有用,建议大家收藏起来,话不多说,附上干货. 概览 ...
- 【刷题】LeetCode 239 滑动窗口最大值- Python手撕最大堆
手撕版 最大堆的完全实现, 堆中元素为二元组(num, idx),比较时用数值,赋值或交换时用整个元组. class Heap: def __init__(self, arr, capacity): ...