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()
函数如下所示: (此特定示例来自)

会失败吗?

根据(我的重点):

要修改变量的线程必须

  • 获取std::mutex(通常通过std::lock\u-guard)
  • 在保持锁的同时执行修改
  • 在std::condition_变量上执行notify_one或notify_all(通知时不需要保持锁)

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

    某些条件变量确实需要为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();
        }