Winapi 能否将Windows CRITICAL_SECTION对象配置为拒绝递归访问?

Winapi 能否将Windows CRITICAL_SECTION对象配置为拒绝递归访问?,winapi,critical-section,Winapi,Critical Section,默认情况下,临界截面对象是递归的。是否可以将此行为配置为pthread互斥,以启用或禁用递归线程访问 为了澄清对评论的回应:我指的是一个Windows CRITICAL_SECTION对象,而不是Windows互斥对象。不,它不能。文档化的API没有以任何方式提及这一点。Windows关键部分始终接受递归访问。关键部分始终允许在线程内递归。互斥体也是如此。这是故意的,不能改变 另一方面,信号量可以防止线程内的递归。有关更多详细信息,请参阅。递归是否意味着它有一个计数器(如智能指针中的引用计数器)

默认情况下,临界截面对象是递归的。是否可以将此行为配置为pthread互斥,以启用或禁用递归线程访问


为了澄清对评论的回应:我指的是一个Windows CRITICAL_SECTION对象,而不是Windows互斥对象。

不,它不能。文档化的API没有以任何方式提及这一点。Windows关键部分始终接受递归访问。

关键部分始终允许在线程内递归。互斥体也是如此。这是故意的,不能改变


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

递归是否意味着它有一个计数器(如智能指针中的引用计数器)?请看一下:@AlexFarber,互斥锁与关键部分是不同的。重点是,如果你不想要递归锁,你需要使用互斥锁不清楚你的目标是什么;例如,您是否尝试检测尝试递归使用以将其标记为(潜在)错误?你可以为你自己的代码拥有的CritSect添加你自己的代码,通过将每个CritSect与一个“正在使用”的bool配对;或者对于仅调试的代码,您可以检查其状态。