问题标签 [recursive-mutex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2403 浏览

windows - Windows上的递归互斥锁?

据我了解,在 Windows 上 CRITICAL_SECTION 只能用作非递归互斥锁。要获得递归互斥锁,您必须使用 OpenMutex 和朋友。

但是,AFAIU、Win32 Mutex 不能与条件变量一起使用(InitializeConditionVariable 等)

有没有办法在 Windows 上将递归互斥锁与条件变量结合使用?

0 投票
3 回答
6879 浏览

c++ - 如何使用递归 QMutex

我正在尝试使用递归 QMutex,我阅读了 QMutex 类参考,但我不明白该怎么做,有人可以举个例子吗?我需要一些方法来锁定 QMutex,可以在调用 lock 方法之后或之前解锁。如果递归互斥锁不是方法,还有其他方法吗?

0 投票
2 回答
865 浏览

pthreads - 是否有一种可移植的方式来静态初始化递归互斥锁?

根据 POSIX,我可以通过这种方式静态初始化互斥锁:

但是,如果我希望互斥锁是递归的怎么办?互斥锁默认是非递归的,并且无法为静态初始化提供互斥锁属性。

0 投票
2 回答
8170 浏览

c++ - 你能把 std::recursive_mutex 和 std::condition_variable 结合起来吗?

你可以结合std::recursive_mutex,std::condition_variable意思是做这样的事情:

如果不允许,那为什么不呢?

我正在使用 VC++11。

0 投票
3 回答
31806 浏览

c++ - std::mutex 与 std::recursive_mutex 作为类成员

我看到有些人讨厌recursive_mutex

http://www.zaval.org/resources/library/butenhof1.html

但是在考虑如何实现一个线程安全的类(互斥锁保护)时,在我看来很难证明每个应该受互斥锁保护的方法都是互斥锁保护的,并且互斥锁最多被锁定一次。

因此,对于面向对象的设计,是否应该std::recursive_mutex默认并std::mutex在一般情况下将其视为性能优化,除非它仅用于一个地方(仅保护一种资源)?

为了清楚起见,我说的是一个私有的非静态互斥体。所以每个类实例只有一个互斥锁。

在每个公共方法的开头:

0 投票
1 回答
89 浏览

multithreading - 递归(可重入)互斥锁是如何工作的?

我在http://preshing.com/20120305/implementing-a-recursive-mutexhttp://en.wikipedia.org/wiki/Reentrant_mutex上阅读了两篇关于递归(可重入)互斥锁的文章,但这两篇文章都没有感觉。

有人可以解释递归(可重入)互斥锁的工作原理吗?

(我发现解释递归互斥锁如何工作的材料很少。如果有人有很好的解释链接,我会关闭这个问题。)

谢谢 !

0 投票
1 回答
347 浏览

c++ - 如何使用 boost 实现一个递归锁,它跨越多个方法?

我有一个类可以打开事务,将操作添加到队列,然后关闭事务。在 open->close 生命周期中,我想使用递归互斥锁,以便在任何时候只有一个线程可以打开事务。所有其他线程都被阻塞,直到当前事务结束。

在这种情况下,我很难确定如何使用 a recursive_mutex,因为锁的存在时间会比单个方法的范围更长。谁能建议我如何在这里应用锁定?

0 投票
2 回答
1166 浏览

c++ - 递归互斥锁背后的想法

我在一个学校实验室工作,我们被指示为计数程序创建一个递归互斥锁。我写了一些代码(不起作用),但我认为这主要是因为我不理解使用递归互斥锁背后的真正想法。谁能详细说明递归互斥锁应该做什么/看起来像什么?

一般说明:我不是在要求答案,只是对递归互斥锁应该做什么进行澄清。

另外,如果有人好奇,这里是所需的代码。我正在编辑/实现的代码是 recmutex.c。

remutex.h

recmutex.c:包含递归互斥锁的函数

count_recursive.cc:上面提到的计数程序。使用 recmutex 函数。

0 投票
1 回答
1064 浏览

c - 错误检查互斥锁与递归互斥锁

我想知道是否可以使用互斥锁自己制作递归互斥锁类型,PTHREAD_MUTEX_ERRORCHECK结果如下:

我发现这种类型的递归互斥锁比具有PTHREAD_MUTEX_RECURSIVE属性的互斥锁快很多:

测试代码(每次调用1000000次):

pthread_recursivemutex_t几乎是两倍的速度pthread_mutex_t?!但两者的行为方式相同......?

这个解决方案安全吗?

0 投票
0 回答
338 浏览

c - 我的递归互斥锁与 pthread_mutex_t(类型:递归)(转发、推送)

我想知道是否可以使用互斥锁自己制作递归互斥锁类型,PTHREAD_MUTEX_ERRORCHECK结果如下:

我发现这种类型的递归互斥锁比具有PTHREAD_MUTEX_RECURSIVE属性的互斥锁快很多:

测试代码(每次调用1000000次):

pthread_recursivemutex_t几乎是两倍的速度pthread_mutex_t?!但两者的行为方式相同......?

顺便提一句:

m: 0 11 m: 11 UNLOCKED!!: 0 m2: 11

这意味着线程 2 在锁定时没有机会获得互斥锁。