c - 如何改变 Windows Mutex 的递归锁定行为?

标签 c windows posix mutex

如果当前拥有锁的线程试图获取它,Windows Mutex 似乎允许再次(递归)获取已获取的锁。

但是,基于 posix 的 pthread 锁不允许这样的行为。

是否有任何编译时宏或任何设置可以使 Windows 互斥体的行为方式与 pthread 互斥体相同?

最佳答案

您无法改变 Windows 互斥锁是递归的事实。虽然默认情况下 Posix 线程不是递归的,但您可以使用 pthread_mutexattr_settype()使用 PTHREAD_MUTEX_RECURSIVE 标志来实现这一点。

在 Windows 中锁定互斥量实际上是一项非常昂贵的操作,最适合进程间同步。对于仅在单个进程中使用的互斥量,通常使用临界区,但这些也是可重入的。正如 nobugz 所述,您需要使用信号量(最大计数为 1)来获得非递归同步。

信号量对象就像一个特殊的计数器,可以跨线程(或进程,如果创建共享)以原子方式递增和递减。通过创建一个最大计数为 1 的对象,您可以获得所需的非递归行为。

关于c - 如何改变 Windows Mutex 的递归锁定行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1988324/

相关文章:

windows - Linux 与 Windows : How does the console render unicode characters?

c - 在销毁它之前确保没有线程在等待临界区

python - 编辑 : how to declare array of struct in Python

c - 具有非空 shmaddr 的 Shmat

c - 字符串的位置 - 从指针数组访问单个字符串

windows - 如何在 Windows 上为 Mercurial 指定不同的编辑器?

python - 获取 Windows 上的当前区域设置

shell - POSIX Shell:在反引号命令替换中转义行继续

c -/dev/shm中的文件用ftruncate增长但不写入时会占用内存吗?

c - 哪个 C 函数用于查明用户是否存在于系统中?