35
我無法在文檔中找到對此的任何引用...是變量賦值和讀取原子操作嗎?
是分配給雙線(或任何其他簡單類型,包括布爾值)從線程角度查看的原子操作嗎?
double value = 0;
public void First() {
while(true) {
value = (new Random()).NextDouble();
}
}
public void Second() {
while(true) {
Console.WriteLine(value);
}
}
在此代碼示例中,第一個方法在一個線程中調用,第二個方法在另一個線程中調用。如果第二個方法在賦值給另一個線程中的變量時得到它的執行,第二個方法會得到一個混亂的值嗎?
我不在乎我是否收到舊值,只有接收到一個有效值(不是一個設置了8個字節中的2個)纔是重要的。我知道這是一個愚蠢的問題,但我想確定,因爲我不知道CLR如何設置變量。
上的方法這不是一個愚蠢的問題。 – 2010-04-29 14:17:57
@EricLippert對象a = 10;這是一個原子操作呢?我已閱讀MSDN,您的文章等,但似乎無法找到答案。因爲它涉及2個步驟。拳擊,然後分配 – Ehsan 2013-08-23 07:25:19
@NoOne:變量'a'的變異是原子的,因爲'object'是一個引用類型。拳擊沒有進入它。 – 2013-08-23 13:48:46