编写 x86 暂停指令的跨平台实现的最佳实践是什么?我计划在 C++ 11 项目的繁忙旋转循环中使用它。
如果我只使用 gcc 工具链,那么我可以使用 _mm_pause 内在函数。即使本机处理器不支持 x86 暂停指令,这个内在函数是否正确?我也希望我的代码也能在 clang/llvm 工具链上工作。
我想回退可以使用“std::this_thread::sleep_for”,因为我使用的是 C++ 11。但我不确定如何检测处理器能力(支持暂停与不支持)并返回睡眠。
我正在使用 cmake 构建我的项目,并且将始终在同一台机器上构建和部署。所以我很乐意在编译期间检测处理器设置。
一个示例实现(伪代码)是:
void pause() {
// Not sure how to detect if pause is available on the platform.
#if defined(USE_mm_pause)
__asm__ ( "pause;" );
#else
std::this_thread::sleep_for(std::chrono::seconds(0));
#endif
}