我有一个关于将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之间存在任何兼容性问题。
答案 0 :(得分:2)
这是一个有趣的问题,我已经思考了一段时间,因为C ++ 11变得广泛可用。
一个普遍的观点,我注意到std组件的boost版本通常具有提供比std版本更多功能的扩展。例如,boost::bind
提供的功能比std::bind
更多,提升<type_traits>
比std更丰富,boost::thread
允许线程取消/中断,std不允许等等。
关于boost thread vs std threads,特别提到
...我正在使用一个系统,该系统使用所有boost :: threads和线程组以及中断功能,而这些功能是您不会开箱即用的标准...
我想要注意,升级线程中断取消并非没有代价,boost::condition_variable
在boost中启用线程取消时确实是boost::condition_variable_any
。 boost::condition_variable_any
维护自己的互斥锁,并且比pthread_cond_t
设计为轻量级包装的原始POSIX boost::condition_variable
执行更多锁定。线程中断功能adds measurable 5-10% speed overhead to boost::condition_variable
,condition variable: std vs boost chart。
我们的boost 1.50版本并没有最新的std :: atomic和内存订购。我想知道我是否可以使用带有boost线程的std :: atomic和std :: memory命令操作load / fectch_add等(获取/释放,放松)并且具有与它们是std :: thread
std::atomic
库不使用或依赖特定的线程库仅用于某些内置原子类型(整数和指针不比自然平台宽度宽,例如32或64 -bit),或者一个平台,所以你可以根据需要混合和匹配线程与原子库,只要你小心使用std::atomic<T>
T
的原子性支持硬件(再次,整数和指针),您可以使用std::atomic<T>::is_lock_free()
检查它。
答案 1 :(得分:0)
没有任何技术原因导致它不起作用。 boost :: thread和std :: thread都只是本机系统线程的包装器,并且所有同步机制都与生成线程所使用的无关。
答案 2 :(得分:0)