2011-07-26 9 views
3

VC++を使用して、上向きのユニークなIDを取得するには、これがマルチスレッドアプリケーションで有効かどうか疑問でしたか?ユニークなID :: InterlockedIncrement(VC++)

uint32_t GetNewId() { return ::InterlockedIncrement(&lastId); } 

は基本的に、私はInterlockedIncrementがちょうど増分を保護し、または戻り値も競合状態に対して守られているかどうかかどうかを疑問に思って?

答えて

4

はい、それは合法的である - そして

  • 読み取りで構成されてアクセスし、
  • 増分、その後、
  • 書き込み、
  • 復帰、発信者
にインクリメントされた値

はアトミックになります。 32ビットでオーバーフローすることを忘れないでください。

+0

安心していただきありがとうございます。 – Cookie

0

確認する最も良い方法はsourceです。

この関数は、他のインターロック 関数への呼び出しに対して原子あります。

1

関数の結果は、レジスタおよび/またはスタックに返されます。各スレッドは別々のスタックとレジスタセットを持っているので、これは安全です。 InterlockedIncrementは、返された値が他の関数の結果と異なることはありません。つまり、関数は別のスレッドからインターラプトされ再入力され、その両方に対して正しい結果を返します。

Rgds、 Martin

+0

といくつかのフードの説明の下に。 – Cookie

関連する問題