今天我遇到了這樣一個問題:一個彙編程序指令是否總是以原子方式執行?
你有一個代碼
static int counter = 0;
void worker() {
for (int i = 1; i <= 10; i++)
counter++;
}
如果worker
會從兩個不同的線程調用,將counter
有什麼價值兩者都完成之後?
我知道實際上它可能是任何東西。但我的膽量內告訴我,那counter++
將最有可能被翻譯成單一的彙編指令,如果兩個線程都執行相同的核心,counter
將是20
但是,如果這些線程在不同的內核或運行處理器,他們的微代碼中是否會存在競爭條件?一個彙編指令總是可以被視爲原子操作嗎?
它與現代編譯器無關,它是相同的操作。 – vava 2009-07-07 09:01:33