提问者:小点点

C++:递归锁--有什么缺点吗?


背景:我有几个应该访问共享数据的线程。 其中一个线程可能锁定互斥体,并且在互斥块中,(同一线程的)某些函数可能再次调用完全相同的锁。

-我不想创建很多互斥体

-我不想放弃锁定(显然)

-我不想改变设计,因为这是一个很大的变化

void funcB()
{
   lock(MA);
   ...
   unlock(MA);
}

void funcA()
{
   lock(MA);
   ...
   funcB();
   ...
   unlock(MA);
}

看来唯一的办法就是使用递归锁。 使用这个功能有什么缺点吗?

当然,如果你想出了其他解决这个案子的方法,请分享


共1个答案

匿名用户

有什么缺点吗?

轻微的表现惩罚--如果你在乎的话。

有没有其他解决办法

您可以给funcb一个bool should_lock=true参数,或者主题的许多变体,例如,让一个重载锁定一个互斥体,然后调用另一个重载,该重载期望引用一个已经锁定的互斥体(也许使用一个assert检查它在调试构建中是否锁定):然后funca可以调用后者。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|递归|锁|缺点)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?