2015-11-04 73 views
0

我不熟悉多線程和鎖以及原子/非原子操作。如何解釋多線程環境下的讀/寫全局變量

最近我看到一個面試問題如下。

f1f2分別放在兩個不同的線程中並且同時運行它們,當它們都返回時,a的值是多少?

int a = 2, b = 0, c = 0 
func f1() 
{ 
    a = a * 2 
    a = b 
} 
func f2() 
{ 
    c = a + 11 
    a = c 
} 

我試圖實現的目標C環境上面的代碼和我得到的是a = 11。我不確定這是否正確,因爲我所做的是將f1放在主隊列中,並將f2放入調度全局隊列中,並運行它可能不正確的異步。

如果有人能夠根據register accessing,CPU processing,memory usage的等級給出答案並解釋過程,那就太好了。

回答

0

答案是--A的結果是隨機的。它可以是任何東西。由於對A的訪問不是原子性的,並且沒有同步,因此取決於隨機因素,不同的線程可能會看到不同的值。如果你設法使一個未對齊的並在X86上運行它,你甚至可能會看到一個非價值的。