C++ 信号量实现-在通知条件变量之前,notify()应该释放互斥吗?
我见过很多信号量的实现,其中C++ 信号量实现-在通知条件变量之前,notify()应该释放互斥吗?,c++,c,multithreading,c++17,C++,C,Multithreading,C++17,我见过很多信号量的实现,其中notify()函数如下所示: (此特定示例来自) 会失败吗?根据(我的重点): 要修改变量的线程必须 获取std::mutex(通常通过std::lock\u-guard) 在保持锁的同时执行修改 在std::condition_变量上执行notify_one或notify_all(通知时不需要保持锁) 因此,您帖子中的任何一个代码序列都应该是可以的。某些条件变量确实需要为notify for保持锁;这可能只是一种习惯,人们在明确不需要的地方这样做。这是我问的一个几
notify()
函数如下所示:
(此特定示例来自)
会失败吗?根据(我的重点):
要修改变量的线程必须
因此,您帖子中的任何一个代码序列都应该是可以的。某些条件变量确实需要为notify for保持锁;这可能只是一种习惯,人们在明确不需要的地方这样做。这是我问的一个几乎相同的问题。它有很好的答案,有助于你理解这个主题。
void notify() {
std::lock_guard<decltype(mutex_)> lock(mutex_);
++count_;
condition_.notify_one();
}
void notify() {
{
std::scoped_lock lock(mutex_);
++count_;
}
condition_.notify_one();
}