14

我在其他人的代码中看到了 asm("pause") ,我想知道它的作用。代码由 Linux 上的 g++ 编译。

此行位于另一个线程中的循环中,该线程会不断轮询是否发生更新。我怀疑它会使程序在再次轮询之前暂停一点,但我想知道(1)我的猜测是否正确(2)为什么需要暂停?我们在其上运行代码的机器有很多处理器,而我的线程完全只是不断地轮询它。

4

1 回答 1

22

基本上这称为自旋循环或忙等待。它会消耗尽可能多的 CPU 资源。这会浪费 CPU 处理能力并增加功耗。

通过放置暂停指令,您是在暗示处理器“这是一个自旋循环”。这迫使处理器不要太聪明而无法做出不必要的预测(优化)。此外,在某些情况下,它可以释放 CPU 时间用于其他事情(例如超线程)。

于 2012-04-15T05:40:32.487 回答