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

Is it okay to use std::this_thread* functions from boost::threads?

混合搭配 boost::threadstd::thread 中的东西是否可以,还是应该分别使用一组函数?

我问是因为我的代码使用了 boost::threads,但我发现 boost::this_thread::sleep_for 在将系统时间调回时表现不正常,但 std::this_thread::sleep_for 可以,所以我想更改睡眠函数调用,并尽可能避免将所有 boost::thread 更改为 std::thread

不建议在一个线程中混合使用 API。正如@Jerry Coffin 提到的,您很可能 运行 进入未定义的行为。这些 API 所依赖的线程本地状态可能与不同 API.

创建的线程不兼容

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

在实践中,您可能会逃避某些事情 iff/because 实现使用相同的实现(例如 linux 上的 pthread)。

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

因此我建议实际上不要混合 库来控制相关线程,以免你想冒险 运行 出人意料 ¹

当然,如果库具有完全独立的关注点(例如,它们在内部使用线程,"in the black box"),那么将这些库组合到一个进程中应该没有问题。


¹ 我可以看到死锁发生,数据 races/leaks 不需要大量的想象力(想想线程本地数据 support/call_once/set_value_at_thread_exit...)