「一意の」型の整数があります。私はそれを次のように使用します:
int unique=0;
public int GetUniqueId()
{
return unique++;
}
私は少し偏執的であることを知っていますが、これは不可分操作ですか、それとも何らかの形のロックが必要ですか?この関数は、非常に並行したクラスで使用されます。
「一意の」型の整数があります。私はそれを次のように使用します:
int unique=0;
public int GetUniqueId()
{
return unique++;
}
私は少し偏執的であることを知っていますが、これは不可分操作ですか、それとも何らかの形のロックが必要ですか?この関数は、非常に並行したクラスで使用されます。
いいえ; これは明らかにアトミックではありません。
x++
他のスレッドによって中断される可能性のある3つの別々の命令(ロード、インクリメント、ストア)にコンパイルされます。
これが複数のスレッドで実行される場合は、Interlocked.Increment(ref unique)
代わりに(アトミック)を呼び出す必要があります。
この呼び出しは通常の増分よりもいくらか遅く、完全なロックよりもはるかに高速です。
このメソッドが並行スレッドによって使用される場合、ロックをかけることによって達成される並行性を処理する必要があります。