using System.Threading;
class Test
{
volatile int counter = 0;
public void Increment()
{
Interlocked.Increment(ref counter);
}
}
引發以下編譯器警告:
"A reference to a volatile field will not be treated as volatile"
我做錯了什麼在這裏提出這個警告?爲什麼編譯器我會對此提出警告?
你讓我感到困惑。在之前的問題(395232)中,我從你的回答中瞭解到,我需要互鎖和易變。現在你說「如果你使用Interlocked,你不需要這個變量變得不穩定。」 – 2009-01-08 17:33:03
不,他們是互相替代的:「或者最好使用互鎖,一個易變的變量或鎖。」這是爲了給三個*不同的方法,而不是一個組合。那是誤導你的部分嗎? – 2009-01-08 17:52:29
我知道在多處理器環境中,多個緩存可以使一個處理器遞增一個不是最後一個值的緩存值。在這種情況下,據我所知,Interlocked不會有幫助,因爲它不會創建刷新高速緩存所需的MemoryBarrier。 – 2009-01-09 02:25:14