2012-06-20 51 views

回答

0

輸出永遠是i=5因爲i++是一個單獨的語句(同樣適用於i--)和任何爲報表i++i--,結果總是i=5的順序。

如果您有int tmp = i; i = tmp + 1;而不是i++,您可以有i≠5,因爲int tmp = i; i = tmp + 1;不是單一語句。

這裏有兩個線程(稱爲A和B)的所有可能性:

 | i = 5 
A: i++ | i = 6 
A: i-- | i = 5 
B: i++ | i = 6 
B: i-- | i = 5 

     | i = 5 
A: i++ | i = 6 
B: i++ | i = 7 
A: i-- | i = 6 
B: i-- | i = 5 

     | i = 5 
A: i++ | i = 6 
B: i++ | i = 7 
B: i-- | i = 6 
A: i-- | i = 5 
+0

如果什麼executiong後的第一個線程我++是搶佔與第二個線程就開始執行它? –

+0

我已將所有可能性添加到我的答案中(2線程的情況下,但5線程的情況相同)。 – Thomash

+0

在三個線程的情況下,我已經計算出所有情況下5,6,7,8中的一個。希望它是正確的。 –