win32 API のみを使用して同じスレッド プロシージャを実行する複数のワーカー スレッドを制御するベスト プラクティスは何ですか?
私は多くの代替案を試しましたが、うまくいきません。私の現在のコードは次のようになります。
// thread proc
DWORD WINAPI thread_proc(LPVOID param) {
while(1) {
WaitForSingleObject(start_event, INFINITE);
// Do some work HERE
// Work finished, go back to waiting for new work
}
}
// main proc
int main(void) {
// create enough worker threads
CreateThread(... thread_proc...);
CreateThread(... thread_proc...);
...
// Wait for work here
// start work by raising event
SetEvent(start_event);
ResetEvent(start_event);
基本的に、イベントを使用して複数の作業スレッドを開始していますが、もちろんこれは期待どおりに機能しません。メイン スレッドが SetEvent() と ResetEvent() の間で中断された場合、ワーカー スレッドは while ループでスピンします。一方、自動リセット イベント オブジェクトを使用すると、待機中のスレッドが 1 つだけ解放されます。
また、すべてのスレッドが終了するまでメインスレッドが待機する必要があります。いくつかの異なるアプローチにうんざりしましたが、それを機能させることができませんでした。マルチスレッド プログラミングの難しさを認識し始めたところだと思います。
編集:文法