gpt4 book ai didi

c++ - 为什么 C++ 并发在 action listing_6.1 中不使用 std::recursive_mutex

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:17 24 4
gpt4 key购买 nike

我正在阅读《C++ Concurrency In Action》一书,对 list 6.1 中使用的互斥体有一些疑问,代码片段如下:

void pop(T& value)
{
std::lock_guard<std::mutex> lock(m);
if(data.empty()) throw empty_stack();
value=std::move(data.top());
data.pop();
}
bool empty() const
{
std::lock_guard<std::mutex> lock(m);
return data.empty();
}

pop 方法锁定互斥锁,然后调用空互斥锁。但是 mutex 不是 recursive_mutex,代码可以正常工作。所以我怀疑 std::mutexstd::recursive_mutex 之间的实际区别是什么。

最佳答案

它正在调用 data.empty(),这看起来像是来自数据成员的函数。与您显示的 empty 功能不同。

如果是,这将是一个递归调用

bool empty() const
{
std::lock_guard<std::mutex> lock(m);
return data.empty();
}

什么都行不通。

关于c++ - 为什么 C++ 并发在 action listing_6.1 中不使用 std::recursive_mutex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33098524/

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