c – std :: condition_variable :: wait_until的实现
发布时间:2020-12-16 07:13:33 所属栏目:百科 来源:网络整理
导读:我正在阅读std :: condition_variable :: wait_until的libstdc implementation,这里是源代码: templatetypename _Clock,typename _Duration cv_status wait_until(unique_lockmutex __lock,const chrono::time_point_Clock,_Duration __atime) { // DR 887
我正在阅读std :: condition_variable :: wait_until的libstdc
implementation,这里是源代码:
template<typename _Clock,typename _Duration> cv_status wait_until(unique_lock<mutex>& __lock,const chrono::time_point<_Clock,_Duration>& __atime) { // DR 887 - Sync unknown clock to known clock. const typename _Clock::time_point __c_entry = _Clock::now(); const __clock_t::time_point __s_entry = __clock_t::now(); const auto __delta = __atime - __c_entry; const auto __s_atime = __s_entry + __delta; return __wait_until_impl(__lock,__s_atime); } template<typename _Clock,typename _Duration,typename _Predicate> bool wait_until(unique_lock<mutex>& __lock,_Duration>& __atime,_Predicate __p) { while (!__p()) if (wait_until(__lock,__atime) == cv_status::timeout) return __p(); return true; } 第二个函数调用循环中的第一个函数.它将执行时钟同步操作.如果我们调用第二个函数,同步操作可能会运行多次.每次都需要同步时钟吗?我认为代码可以改进在第二个功能中只通过同步时钟一次.对吧? 解决方法
是的,不.
是的,可以优化此代码,以便在循环时不操作time_points.但是,我不确定这是否真的有必要. 考虑是什么使得谓词 当notified时,它检查谓词以查看是否有工作要做. >如果谓词返回true,即条件变量保护的条件为真,则wait_until返回true. 这只留下一个循环实际循环的情况:当通知condition_variable时,谓词返回false. 这被称为spurious wakeup,并不是典型的情况,所以它并不值得优化. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- c# – DataGridView RowCount vs Rows.Count
- 单元测试c#属性
- 设置/拆除CI构建的Oracle模式,而不会破坏目录
- 在Windows环境下使用git进行add的时候,会提示如
- 1.5 Swift的表达式Expressions [Swift原创教程]
- cocos2d-x 2.x使用python脚本快捷创建项目的简单
- [React技术内幕]:setState的秘密
- ruby-on-rails-3.1 – 资产管道强制js.erb重新编
- react-native – React Native Redux – 从async
- How to access sqlite database
热点阅读