gpt4 book ai didi

c++ - condition_variable 等待锁

转载 作者:行者123 更新时间:2023-11-27 22:41:10 25 4
gpt4 key购买 nike

<分区>

我尝试将 condition_variable 与 STL 中的 unique_lock 一起使用。

但是它在 spin() 函数上失败了。据我所知,这是一个环环相扣的问题。但我不明白为什么。

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

void spin();

bool stop = false;
bool done = false;

std::thread th(spin);
std::mutex mutex;
std::condition_variable cv;


void join()
{
{
std::unique_lock<std::mutex> lock(mutex);
stop = true;
}

cv.notify_one();

th.join();
}

void set_done()
{
{
std::unique_lock<std::mutex> lock(mutex);

std::cout << "setting done" << std::endl;

done = true;
}

cv.notify_one();
}

void spin()
{
while (true)
{
std::unique_lock<std::mutex> lock(mutex);

if (done)
{
std::cout << "done..." << std::endl;
continue;
}

if (stop)
{
return;
}

cv.wait(lock);
}
}

int main(int argc, char* argv[])
{
set_done();

join();

return 0;
}

上面的代码只是写了“setting done”并因运行时错误而失败。

为什么当 set_done 已经解锁互斥体时自旋的锁会失败?

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