我想使用共享的互斥锁,因此线程只有在向量/ 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();
}
答案 0 :(得分:2)
我相信你需要使用递归互斥锁。看到关于这个问题的好讨论:
Boost在boost:recursive_mutex类中提供此功能。
答案 1 :(得分:0)
您需要做的两件事:
1)由于func1
实现了写操作,因此需要获取独占锁,而不是共享锁。
2)由于已经锁定了func2
,因此不应该尝试获取锁。