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

时间:2016-09-22 15:24:52

标签: c++ multithreading

考虑以下成员函数。它会导致僵局吗?

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);
}

1 个答案:

答案 0 :(得分:1)

如果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