asm("暂停")做什么以及为什么要使用它

Ven*_*tta 13 linux x86 assembly

我在其他人的代码中看到了asm("暂停"),我想知道它是做什么的.代码由Linux上的g ++编译.

这行是在另一个线程中的循环中,如果发生更新,它会不断轮询.我怀疑它会让程序在再次轮询之前暂停一下,但我想知道(1)我的猜测是否正确(2)为什么有必要暂停?我们运行代码的机器有很多处理器,我的线程完全只是继续轮询它.

tou*_*uko 17

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

通过放置暂停指令,你会暗示处理器"这是一个旋转循环".这迫使处理器不要太聪明以进行不必要的预测(优化).此外,在某些情况下(例如超线程),它可以释放CPU时间用于其他事情.