2011-06-21 14 views
3

私はこのようなコードを持っているユニークな連続した値を持っている:スレッドセーフな方法は、

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

私はユニークで連続したmyIntの各値を持っている必要があります。たとえば、そのようなスレッドを5つ実行する場合は、myIntの値0, 1, 2, 3, 4(順序は重要ではありません)が必要です。

この方法がスレッドセーフであるかどうかわからないので、必要なものを達成するための最良の方法は何ですか?スレッドの安全使用のためInterlocked.Increment()

答えて

6

はアトミック 操作として、指定された変数と 格納結果をインクリメント。

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-and-immutability-are-different-part-three.aspx –

関連する問題