boost :: thread和std :: thread兼容性问题?

时间:2014-06-05 21:23:24

标签: c++ multithreading c++11 boost

我有一个关于将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之间存在任何兼容性问题。

3 个答案:

答案 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_anyboost::condition_variable_any维护自己的互斥锁,并且比pthread_cond_t设计为轻量级包装的原始POSIX boost::condition_variable执行更多锁定。线程中断功能adds measurable 5-10% speed overhead to boost::condition_variablecondition 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)

仅供参考,另一个线程表明在管理信号/终止时,boost线程和std线程之间确实存在一些兼容性问题: Preventing thread from calling std::terminate() on detach after handled exception