Windows CRITICAL_SECTION 对象可以配置为拒绝递归访问吗?

问题描述 投票:0回答:2

默认情况下,CRITICAL_SECTION 对象是递归的。可以像 pthread 互斥体一样配置此行为以启用或禁用递归线程访问吗?

针对评论澄清一下:我特指的是 Windows CRITICAL_SECTION 对象,而不是 Windows 互斥体。

winapi critical-section
2个回答
8
投票

不,不能。记录的 API 没有以任何方式提及这一点。 Windows 临界区始终接受递归访问。

当线程拥有临界区时,它可以对 EnterCriticalSection 或 TryEnterCriticalSection 进行额外调用,而不会阻止其执行。这可以防止线程在等待它已经拥有的临界区时发生死锁。

来源:https://learn.microsoft.com/en-us/windows/win32/sync/ritic-section-objects


4
投票

关键部分始终允许线程内递归。互斥体也是如此。这是设计使然,无法更改。

另一方面,信号量可以防止线程内的递归。有关更多详细信息,请参阅 MSDN 文档

© www.soinside.com 2019 - 2024. All rights reserved.