スレッドを識別するカウンタを使用しているマルチスレッドコード(質問Windows API Thread Pool simple exampleを参照)があります。InterlockedIncrementとEnterCriticalSection/counter ++/LeaveCriticalSection
InterlockedIncrementを使用してスレッドのコールバック関数でこのカウンタをインクリメントすることをお勧めしました。しかし、これはいくつかの並行処理の問題が発生したので、変数を適切にロックしていないようです。私はInterlockedIncrementを手動でクリティカルセクションを使用して置き換えました:EnterCriticalSection/counter ++/LeaveCriticalSectionこれは今では完全に機能します。
なぜそうですか? 2つのオプションが厳密に同等であるとは思われませんか? 私はスレッド数を約2つ(約10)起動することについて話しています。
どのようにして、変数を適切にロックしていないようですか?どのような並行性の問題が発生しましたか? – LukeH
'InterlockedIncrement'と友達はロックする必要はありません。単一のアセンブリ命令を実行します。あなたは、あなたが見ていた問題についてもっと説明することができますか? – Nate
LukeH:カウンタは常に厳密に連続した整数の連続を与えるとは限りませんでした。ときどき0から始まるカウンタが実行していた:0 1 2 2 4 5 ... – WhitAngl