gpt4 book ai didi

通知等待模式的C++多线程算法设计

转载 作者:行者123 更新时间:2023-11-30 02:36:40 24 4
gpt4 key购买 nike

我正在寻找以下算法在 Windows 上的多线程实现的建议和代码示例:

  • Thread1:接受input1,开始工作,通知Thread2,继续工作。
  • Thread2:接受input2,开始工作,等待thread2的通知,做一些处理,通知Thread3,继续工作。
  • Thread3:接受input3,做工作,等待thread3的通知,做一些处理,通知Thread4,继续工作。等等。

由于我是 C++ 的新手,我不确定选择什么机制来在线程之间发送/接收通知。
我考虑了几种方法:mutexsemaphorecritical section,但这些似乎主要用于锁定,而不是等待通知。

最佳答案

除了您已经列出的常用助手之外,您还应该看看 condition variable .

The condition_variable class is a synchronization primitive that can be used to block a thread, or multiple threads at the same time, until: - a notification is received from another thread [...]

当使用条件变量时,线程 2 可以等待直到它被“通知”,这样线程 2 才能继续,依此类推。这是一个简单的例子:

std::mutex mtx;
std::condition_variable cv;
static bool ready = false;

static void set ()
{
{
std::unique_lock<std::mutex> lck(mtx);
while (!ready)
cv.wait(lck);
}

std::cout << "message received" << std::endl;
}

static void go()
{
std::unique_lock<std::mutex> lck(mtx);
ready = true;

// here we set the condition variable for thread1
cv.notify_all();
}

int main ()
{
std::thread thread1 = std::thread(set);

go();
thread1.join();
return 0;
}

关于通知等待模式的C++多线程算法设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32468325/

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