gpt4 book ai didi

c++ - 如果我注释 "while" block ,为什么程序会陷入僵局?其中的 "yield"行有什么作用?

转载 作者:搜寻专家 更新时间:2023-10-31 00:28:23 26 4
gpt4 key购买 nike

<分区>

我正在学习 condition_variable 并运行一些示例。我很好奇,如果我注释该 block ,为什么以下代码会陷入僵局。这是一个使用 condition_variable 的简单消费者和生产者示例。我认为这是一个死锁问题,不是吗?

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>

using namespace std;

mutex mtx;
condition_variable cv;

int cargo = 0;

bool shipment_available()
{
return cargo != 0;
}

void consume(int cnt)
{
for (int i = 0; i < cnt; i++)
{
unique_lock<mutex> lck(mtx);
cv.wait(lck, shipment_available);
printf("%d\n", cargo);
cargo = 0;
}
}

int main()
{
thread consumer_thread(consume, 10);

for (int i = 0; i < 10; i++)
{
//while (shipment_available()) // Dead lock without this block
//{
// std::this_thread::yield();
//}
unique_lock<mutex> lck(mtx);
cargo = i + 1;
cv.notify_one();
}

consumer_thread.join();
}

如果我取消对该 block 的注释,它运行良好。

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