bja*_*fly 5 c++ multithreading boost c++11
我有一个关于将boost :: threads与一些c ++ 11标准项混合和匹配的问题,这有用吗?我还没有真正测试过任何东西,但我正在使用一个系统,它使用所有boost :: threads和线程组以及你没有开箱即用的中断功能,所以没有变化.我们的boost 1.50版本并没有最新的std :: atomic和内存订购.我想知道我是否可以使用带有boost线程的std :: atomic和std :: memory排序操作load/fectch_add等(获取/释放,放松)并且具有与它们是std :: thread相同的结果.这些都是我的linux机器下的pthreads所以我认为答案是肯定我可以混合搭配.虽然,我只想确认并看看是否有人在混合boost :: thread和std :: thread apis之间存在任何兼容性问题.
这是一个有趣的问题,自从 C++11 广泛使用以来我一直在思考这个问题。
一个普遍的观点是,我注意到 std 组件的 boost 版本通常具有比 std 版本提供更多功能的扩展。例如,boost::bind
提供了比 std 更多的功能std::bind
,boost<type_traits>
比 std 更丰富,boost::thread
允许线程取消/中断,而 std 则不允许,等等。
正如您提到的,特别是关于增强线程与标准线程
...我正在使用一个使用所有 boost::threads 和线程组以及中断功能的系统,而您无法使用标准的开箱即用功能...
我想指出的是,boost 线程中断取消并不是没有代价的,boost::condition_variable
实际上是boost::condition_variable_any
在 boost 中启用线程取消时。boost::condition_variable_any
维护自己的互斥体,并且比最初的 POSIX 执行更多的锁定,POSIXpthread_cond_t
被boost::condition_variable
设计为轻量级包装。线程中断功能将可测量的 5-10% 速度开销添加到boost::condition_variable
条件变量:std 与 boost 图表。
我们的 boost 1.50 版本没有最新的 std::atomic 和内存排序内容。我想知道是否可以将 std::atomic 和 std:: 内存排序操作 load/fectch_add 等(获取/释放,relaxed)与 boost 线程一起使用,并获得与 std::thread 相同的结果
std::atomic
库不会仅针对某些内置原子类型(整数和指针不比自然平台宽度宽,例如 32 或 64 位)或平台使用或依赖于特定线程库,因此您可以混合和匹配线程使用您喜欢的原子库,只要您小心使用std::atomic<T>
硬件T
支持的原子性(同样,整数和指针),您就可以使用 进行检查std::atomic<T>::is_lock_free()
。
归档时间: |
|
查看次数: |
1558 次 |
最近记录: |