Daveshammer
Results
2
comments of
Daveshammer
> 确实存在伪唤醒,但是问题在于多一次循环后task_done_workers++导致计数不准。 这里是不是改成thread_wait(locker,!is_waiting)后,如果主线程连续两次wait_tasks,会导致worker线程还没有执行完第一轮的thread_cv.wait(locker, [this] { return !is_waiting; });,第二次的wait_tasks又把is_waiting改成true,导致第二轮的task_done_workers++没有执行。
应该是忙等待导致的CPU占用高(worker线程在空闲时不停的yield),对延迟不敏感可以把yield改成std::this_thread::sleep_for(std::chrono::milliseconds(1));试试