可以混合和匹配boost::thread
和std::thread
中的内容,还是应该为每个内容使用一组函数?
我问,因为我的代码使用了boost::thread
,但我发现boost::this_thread::sleep_for
在设置系统时间时没有正常运行,但std::this_thread::sleep_for
确实如此,所以我想改变我的睡眠函数调用,并尽可能避免将我的所有boost::thread
更改为std::thread
。
答案 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::thread
和boost::thread
应该没问题。由于@Red Alert说1.58修复了这个bug,这应该可以解决你的问题。否则,您可以针对不同的平台暂时恢复为usleep()
和#ifdef
的类似功能。