可以使用boost :: threads中的std :: this_thread *函数吗?

时间:2015-04-17 21:52:08

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

可以混合和匹配boost::threadstd::thread中的内容,还是应该为每个内容使用一组函数?

我问,因为我的代码使用了boost::thread,但我发现boost::this_thread::sleep_for在设置系统时间时没有正常运行,但std::this_thread::sleep_for确实如此,所以我想改变我的睡眠函数调用,并尽可能避免将我的所有boost::thread更改为std::thread

2 个答案:

答案 0 :(得分:1)

在实践中,你可能会忘记iff /因为实现使用相同的实现(例如linux上的pthread)。

但是,你打破不变量。简单示例:Boost Thread的中断点不适用于非boost同步原语(包括std::this_thread::sleep_*)。

因此,我会反对实际混合库来控制相关线程,以免你想冒险进入企业¹

当然,如果库有完全不同的问题(例如,他们在内部使用线程,“在黑匣子中”),那么在一个过程中组合这些库应该没有问题。


¹我可以看到发生死锁,数据竞争/泄漏不需要大量的想象力(想想线程本地数据支持/ call_once / set_value_at_thread_exit ...)

答案 1 :(得分:0)

在一个线程中混合API是不可取的。正如@Jerry Coffin所提到的,你可能会遇到未定义的行为。可能存在这些API所依赖的线程本地状态,这与不同API创建的线程不兼容。

但是,在一个进程中单独使用std::threadboost::thread应该没问题。由于@Red Alert说1.58修复了这个bug,这应该可以解决你的问题。否则,您可以针对不同的平台暂时恢复为usleep()#ifdef的类似功能。