防止死锁共享提升互斥锁

时间:2012-01-21 05:26:34

标签: c++

我想使用共享的互斥锁,因此线程只有在向量/ map /写入而不是从中读取时才会被锁定。但我认为func2()永远不会得到唯一的锁,因为func1()永远不会解锁。在尝试获取uniqueue锁时,有没有办法在shared_mutex上不计算同一线程锁?或者问题是否仍会发生?

我猜我需要找到一种方法来强制获取锁(一次一个线程)一旦所有线程到达func2()或已释放锁。

func2()
{
    boost::unique_lock<boost::shared_mutex> lock_access3(shared_mutex);
    /*stuff*/
    lock_access3.unlock(); 
}

func1()
{
    boost::shared_lock<boost::shared_mutex> lock_access1(shared_mutex);
    func2();
    lock_access1.unlock();
}

2 个答案:

答案 0 :(得分:2)

我相信你需要使用递归互斥锁。看到关于这个问题的好讨论:

Boost在boost:recursive_mutex类中提供此功能。

答案 1 :(得分:0)

您需要做的两件事:

1)由于func1实现了写操作,因此需要获取独占锁,而不是共享锁。

2)由于已经锁定了func2,因此不应该尝试获取锁。

相关问题