Closed LEON-REIN closed 1 year ago
在修改通知变量时加锁或者在notify前加锁都可以避免没有通知到异步线程的情况。而后者某些情况下其实更加简便,不容易出错。https://github.com/CodingHanYa/Hipe/blob/main/src/dynamic_pond.h#L265,就像在这里我们势必要解锁后执行任务,但我们可能会因为忘记给total_tasks加锁而导致出现没有通知到异步线程的情况。
在 GCC 的 condition_variable 实现中两个 notify 函数中已经有了加锁~ 似乎用的类内自己的 mutex
:
void
notify_one() noexcept
{
lock_guard<mutex> __lock(*_M_mutex);
_M_cond.notify_one();
}
void
notify_all() noexcept
{
lock_guard<mutex> __lock(*_M_mutex);
_M_cond.notify_all();
}
这个是保护notify本身的锁,不能和保护wait的锁互斥
好的! 感谢回复~
代码中有多处在使用条件变量的
.notify_all()
或.notify_one()
前用了锁保护. 但是根据:来看, 似乎不需要加锁?
在代码中的位置: