VC++を使用して、上向きのユニークなIDを取得するには、これがマルチスレッドアプリケーションで有効かどうか疑問でしたか?ユニークなID :: InterlockedIncrement(VC++)
uint32_t GetNewId() { return ::InterlockedIncrement(&lastId); }
は基本的に、私はInterlockedIncrementがちょうど増分を保護し、または戻り値も競合状態に対して守られているかどうかかどうかを疑問に思って?
VC++を使用して、上向きのユニークなIDを取得するには、これがマルチスレッドアプリケーションで有効かどうか疑問でしたか?ユニークなID :: InterlockedIncrement(VC++)
uint32_t GetNewId() { return ::InterlockedIncrement(&lastId); }
は基本的に、私はInterlockedIncrementがちょうど増分を保護し、または戻り値も競合状態に対して守られているかどうかかどうかを疑問に思って?
はい、それは合法的である - そして
はアトミックになります。 32ビットでオーバーフローすることを忘れないでください。
確認する最も良い方法はsourceです。
この関数は、他のインターロック 関数への呼び出しに対して原子あります。
関数の結果は、レジスタおよび/またはスタックに返されます。各スレッドは別々のスタックとレジスタセットを持っているので、これは安全です。 InterlockedIncrementは、返された値が他の関数の結果と異なることはありません。つまり、関数は別のスレッドからインターラプトされ再入力され、その両方に対して正しい結果を返します。
Rgds、 Martin
といくつかのフードの説明の下に。 – Cookie
安心していただきありがとうございます。 – Cookie