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

亚尼夫·G

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

-我不想创建多个互斥对象

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

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

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

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

看来唯一的方法是-使用递归锁。使用此功能有什么缺点吗?

当然,如果您想通过其他方法解决此问题,请分享

托尼·德罗伊

有什么缺点吗?

轻微的性能损失-如果需要,请衡量。

任何其他方式来解决

您可以给出funcB一个bool should_lock = true参数,或在主题上进行多种选择,例如,有一个重载锁定了一个互斥锁,然后调用了另一个重载,该重载期望引用已锁定的互斥锁(也许使用一个断言来检查它是否已在调试版本中锁定):funcA可以叫后者。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有一种方法来获取锁C#的递归级别

Java的“同步”和C#的“锁”之间有什么区别吗?

是否有“单一互斥锁死锁”(带有非递归互斥锁的死锁类型情况)的术语?

ConcurrentHashMap有什么缺点吗?

SEAM有什么缺点吗?

为C ++拥有标准GUI库的缺点是什么?

递归锁(Mutex)与非递归锁(Mutex)

我可以在Async-await体系结构中的c#中使静态变量为Volatile吗?优缺点都有什么?

为什么必须要有缺点才能防止无限递归

使用异步有什么缺点吗?

setNamespaceAware(true)有什么缺点吗?

使用“ .on”时有什么缺点吗?

与xampp相比,laragon有什么缺点吗?

C ++-递归结构-有可能吗?

C中的随机整数,与整数算术相比,rand()%N有多糟糕?它有什么缺点?

共享互斥锁和互斥锁之间的区别(为什么C ++ 11中都存在互斥锁)?

在 C++ 项目中保留未使用的类有什么缺点?

我的C ++递归函数有什么问题?

发布没有 <form> 标签的表单有什么缺点吗

为什么锁要求C#中的实例?

Web应用程序中C3P0的这种含义正确吗?这种实现的优缺点是什么?

使用外部“ C”的潜在缺点是什么?

通过`core`而不是`std`引用模块有什么缺点吗?

在Javascript中使用Map over Object有什么缺点吗?

重写ThreadPoolExecutor afterExecute方法-有什么缺点吗?

在Docker中使用PYTHONDONTWRITEBYTECODE有什么缺点吗?

使用rm $ {ls)删除文件有什么缺点吗?

使用Joda-Time有什么缺点吗?

在Java中,类上的静态方法有什么缺点吗?