仅使用 win32 API 控制执行同一线程 proc 的多个工作线程的最佳实践是什么?
我尝试了很多替代方案,但我无法做到正确。我当前的代码如下所示:
// 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 循环中旋转。另一方面,使用自动重置事件对象只会释放一个等待线程。
另外,我需要主线程等待所有线程完成。我厌倦了几种不同的方法,但我无法让它发挥作用。我想我才刚刚开始意识到多线程编程有多难。
编辑:语法