gpt4 book ai didi

c++ - 两个重叠的互斥锁会导致死锁吗?

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

考虑以下成员函数。会不会导致死锁?

void foo::insert(item_ptr item)
{
lock_guard<mutex> lock(mu_);
items_.insert(item);
}

void foo::insert(vector<item_ptr> items)
{
lock_guard<mutex> lock(mu_); // will this lead
// to deadlock?
for(auto item:items)
insert(item);
}

最佳答案

如果 mu_ 是一个 std::mutex,那么你就有问题了。 std::mutex 不支持递归锁并且不能被同一个线程锁定两次。请参阅:http://en.cppreference.com/w/cpp/thread/mutex

如果 mu_ 是一个 std::recursive_mutex,那么你没有问题。如果一个线程已经锁定了一个递归互斥量,它就可以锁定它。参见 http://en.cppreference.com/w/cpp/thread/recursive_mutex

关于c++ - 两个重叠的互斥锁会导致死锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39643038/

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