我在其他人的代码中看到了asm(“暂停”),我想知道它的作用。代码由Linux上的g ++编译。
这一行位于另一个线程的循环中,如果发生更新,它会不断轮询。我怀疑它会让程序在再次轮询之前暂停一下,但我想知道(1)我的猜测是否正确(2)为什么有必要暂停?我们运行代码的机器有很多处理器,我的线程完全只是继续轮询它。
答案 0 :(得分:17)
基本上称为旋转循环或忙等待。它将消耗尽可能多的CPU资源。这会浪费CPU处理能力并增加功耗。
通过放置暂停指令,你会暗示处理器“这是一个旋转循环”。这迫使处理器不要太聪明以进行不必要的预测(优化)。此外,在某些情况下(例如超线程),它可以释放CPU时间用于其他事情。