gpt4 book ai didi

c++ - 信号量实现-在通知condition_variable之前,notify()是否应释放互斥量?

转载 作者:行者123 更新时间:2023-12-03 13:23:30 26 4
gpt4 key购买 nike

我已经看到了信号量的许多实现,其中notify()函数看起来像这样:
(此特定示例来自here)

void notify() {
std::lock_guard<decltype(mutex_)> lock(mutex_);
++count_;
condition_.notify_one();
}

我不明白在调用 notify_one()时保持锁定的原因。即使在释放互斥锁之后但在通知条件变量之前发生了虚假唤醒,也应该一切正常(因为 condition_.wait()应该使用谓词来处理虚假唤醒)。

是否有以下情况:
void notify() {
{
std::scoped_lock lock(mutex_);
++count_;
}
condition_.notify_one();
}

会失败吗?

最佳答案

根据cppreference(重点是我的):

The thread that intends to modify the variable has to

  1. acquire a std::mutex (typically via std::lock_guard)
  2. perform the modification while the lock is held
  3. execute notify_one or notify_all on the std::condition_variable (the lock does not need to be held for notification)


因此,您帖子中的任何代码序列都应该可以。

关于c++ - 信号量实现-在通知condition_variable之前,notify()是否应释放互斥量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61976530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com