我现在有疑虑
使用 CreateEvent 创建事件。
HANDLE g_hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
并且创建了大约10个线程,每个线程 等待使用
WaitForSingleObject(g_hEvent,INFINITE)
执行此操作后,每个事件都会等待相同的事件。 在后续代码中,当特定情况发生时,会激活SetEvent来唤醒等待的线程。
这就是我发现效率低下问题的地方。
事实上,你只需要使用
SetEvent
唤醒一个线程即可。但是,如果运行上面的代码,所有 10 个线程都会被唤醒并竞争,并且只有最先唤醒的线程运行,其余的进入等待状态。
我不想使用这种低效的方法,而是只想唤醒一个线程。这种情况我该怎么办?
您想将“条件变量”与“通知一个”原语一起使用。
C++ 标准库:https://en.cppreference.com/w/cpp/thread/condition_variable
Win32:https://learn.microsoft.com/en-us/windows/win32/sync/condition-variables(使用“WakeConditionVariable”函数唤醒单个线程)