gpt4 book ai didi

c++ - 等待往事

转载 作者:行者123 更新时间:2023-11-28 05:46:57 25 4
gpt4 key购买 nike

我有一个 C++ 程序,它的测试类有两种方法:

void IntegrationTestBase::wait_test_end() {
unique_lock<mutex> lock(m_mutex);

m_cond.wait(lock);
}

void IntegrationTestBase::notify_test_end() {
XN_LOGF_ITEST_BASE(INFO, "Test end");

m_cond.notify_all();

m_cond 是条件变量,m_mutex 是互斥体。

流程是未知数量的线程可能会wait_test_end,然后一些其他线程可能会notify_test_end,它们都将停止等待。

问题是在 notify_test_end 之后,一些其他线程可能会 wait_test_end 并且它们将无限期地等待。

我该如何应对?

最佳答案

解决它的方法是了解什么是条件变量,什么不是。特别是,它不是一种信号机制。

条件变量保护某种资源(例如,一个真实的变量)。使用它的模式总是一样的:

  1. 锁定互斥量
  2. 检查真实变量,看看它是否包含您感兴趣的值
  3. 如果不是,则等待条件变量 - 如果是,则使用该变量并解锁互斥锁。

关于c++ - 等待往事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36036620/

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