Open HandsomeGiao opened 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()函数,导致资源浪费.
确实存在伪唤醒,但是问题在于多一次循环后task_done_workers++导致计数不准。
这是在workbranch.hpp里面的mission函数的一段代码,这段代码最后的 thread_cv.wait(locker) 应该改为 thread_wait(locker,!is_waiting) 吗?否则伪唤醒可能让一个没有任务的线程一直执行yield()函数,导致资源浪费.