2012-04-15 65 views
10

我在其他人的代碼中看到了asm(「pause」),我不知道它在做什麼。該代碼由Linux上的g ++編譯。asm(「pause」)做什麼以及爲什麼要使用它

此行位於另一個線程中的循環中,該線程持續輪詢是否發生更新。我懷疑它會讓程序在再次輪詢之前暫停一下,但是我想知道(1)我的猜測是否正確(2)爲什麼需要暫停?我們運行代碼的機器有很多處理器,而且我的線程完全會繼續輪詢它。

+0

它是內核代碼還是應用程序代碼? – 2012-04-15 09:50:29

回答

15

基本上這就是所謂的旋轉循環,或者是等待。它會消耗盡可能多的CPU資源。這浪費了CPU處理能力並增加了功耗。

通過放置暫停指令,您暗示處理器「這是一個旋轉循環」。這迫使處理器不要太聰明以至不必要的預測(優化)。另外,在某些情況下,它釋放了CPU時間以用於其他事情(例如超線程)。

相關問題