CodingHanYa / workspace

workspace是基于C++11的轻量级异步执行框架,支持:通用任务异步并发执行、优先级任务调度、自适应动态线程池、高效静态线程池、异常处理机制等。
Apache License 2.0
1.03k stars 152 forks source link

伪唤醒可能导致资源浪费 #43

Open HandsomeGiao opened 1 month ago

HandsomeGiao commented 1 month ago
if (is_waiting) {
                std::unique_lock<std::mutex> locker(lok);
                task_done_workers++;
                task_done_cv.notify_one();
                thread_cv.wait(locker);
}

这是在workbranch.hpp里面的mission函数的一段代码,这段代码最后的 thread_cv.wait(locker) 应该改为 thread_wait(locker,!is_waiting) 吗?否则伪唤醒可能让一个没有任务的线程一直执行yield()函数,导致资源浪费.

CodingHanYa commented 1 month ago

确实存在伪唤醒,但是问题在于多一次循环后task_done_workers++导致计数不准。