【发布时间】:2014-10-01 03:03:07
【问题描述】:
我注意到许多使用特定于操作系统的原语实现的无锁算法,例如here 描述的自旋锁(使用特定于 Linux 的原子原语)经常使用“cpu Relax”指令。使用 GCC,可以通过以下方式实现:
asm volatile("pause\n": : :"memory");
具体来说,这条指令经常用在while循环自旋锁的主体中,同时等待一个变量设置为某个值。
C++11 似乎没有提供任何可移植的“cpu_relax”类型指令。这有什么原因吗? “暂停”语句真的有什么用处吗?
编辑:
另外,我想问:为什么 C++11 标准委员会不决定包含一个通用的 std::cpu_relax() 或其他什么?便携性是不是太难保证了?
【问题讨论】:
-
@bames53,std::this_thread::yield 不是一回事。将 cpu 控制权交给线程调度程序。相反,cpu 放松概念指示 cpu 避免分支预测和其他各种事情。
标签: c++ multithreading gcc c++11 atomic