2011-06-21 40 views
3

我有這樣的代碼:線程安全的方法有獨特的連續值

static volatile int i = 0; 
static void Foo() { 
int myInt = i++; 
// now use myInt 
} 

我需要的myInt獨特而連續的每個值。例如,如果將運行5個這樣的線程,則它們應該具有myInt0, 1, 2, 3, 4(順序不重要)。

所以,我不知道這種方式是否是線程安全的,以及實現我所需要的最佳方式是什麼?

回答

6

爲了線程安全使用Interlocked.Increment()

遞增指定的變量和 存儲結果,作爲原子 操作。

int MyInt = Interlocked.Increment(ref i); 

[...而且也沒有理由將其標記爲揮發性的,這是有點壞了,可能會被棄用/在C#的未來版本中刪除...]

+0

謝謝!我真的認爲,這種「揮發性」是爲這種情況創造的...... – aplavin

+1

@chersanya請參閱Eric Lippert最近的博客文章http://blogs.msdn.com/b/ericlippert/archive/2011/06/16/atomicity -volatility和 - 不變性-是-不同部分-three.aspx –