C++11 std::condition_variable
来源:互联网 发布:大华网络监控远程设置 编辑:程序博客网 时间:2024/05/16 14:09
今天研究了下std::condition_variable,在项目中经常用到,用于wait/notify的场景,不得不说c++11 封装的东西还真不是盖的,自己要想实现一个wait/notify 的功能还不简单,里面涉及内核态的转换,让我都狠吃不消。
为什么我对这玩意比较感兴趣,从用户层来说,让线程阻塞最简单的办法就是调用sleep,但这面临一个很严重的缺陷,就是比如我sleep 5秒,但我想在第2秒的时候将线程唤醒,通过sleep是做不到的。还有个可行的办法就通过死循环再设个条件,这个是可以达成目标的,但一个可怕的问题是将消耗100%的资源。其实sleep 1毫秒,再检测条件勉强可以接受,但std::condition_variable中的wait 远远比这个占用的资源少很多很多,notify反应速度不亚于它。为嘛呢,从汇编上看,他调用win32或unix kernel,从内核中断,检测条件就几乎不消耗资源了,关于内核更复杂的东西,这也只有在以后的文章中研究讲解了。我在这就贴下std::condition_variable 使用方法吧。
mutex m; //建立一个最基本互斥对象
unique_lock<mutex> lock(m);
//lock_guard 自解锁 创建时对mutex上锁,析构时解锁
//unique_lock 可以认为是对mutex的管理,并提供了一些扩展方法和特性
condition_variable cv;
//我就写点常用的方法吧
cv.wait(unique_lock<mutex>& lock);//无限等待,直到收到notify
cv.wait_for(unique_lock<mutex>& lock,const chrono::duration<_Rep, _Period>& _Rel_time);//等待_Rel_time,超时或收到notify 继续执行
cv.notify_one();
cv.notify_all();
使用还是很简单的~
- C++11 std::condition_variable
- std::condition_variable
- C++11多线程(八):std::condition_variable 详解
- C++11 并发指南std::condition_variable详解
- C++11中std::condition_variable的使用
- std::condition_variable 详解
- C++11 并发指南五(std::condition_variable 详解)
- c++11 条件变量 std::condition_variable,多线程同步
- C++11 并发指南五(std::condition_variable 详解)
- C++11 并发指南五(std::condition_variable 详解)
- C++11 并发指南五(std::condition_variable 详解)
- C++11 并发指南五(std::condition_variable 详解)
- 如何用通过C++11提供的std::condition_variable实现主线程控制子线程的启动和停止
- std::thread库的condition_variable进行线程唤醒
- 关于std::condition_variable需要注意的地方spurious wake-ups
- mutex and condition_variable[c++11]
- c++11之condition_variable学习笔记
- c++11中的thread, mutex, condition_variable讲解
- HBase Shell命令
- Android 图片加载框架Glide4.0源码完全解析(一)
- 二叉树遍历LeetCode#144 #94 #145 (前中后序遍历)
- Kotlin 官方学习教程之属性和字段
- QML之FolderListModel用法
- C++11 std::condition_variable
- Android常用工具类...
- 推荐几个机器学习算法及应用领域相关的中国大牛
- DNS
- LeetCode 126. Word Ladder II
- ionic的性能优化和ionic-native-transitions插件的参数调优等
- java使用access数据库问题 java.sql.SQLException: [Microsoft][ODBC ??????????] δ???????Դ??Ʋ???δָ??Ĭ???????
- mysql的语句分类,查询、子查询及连接查询
- sql 删除重复记录,只保留ID号最小(或最大)的一条