【问题标题】:Can a Windows CRITICAL_SECTION object be configured to deny recursive access?可以将 Windows CRITICAL_SECTION 对象配置为拒绝递归访问吗?
【发布时间】:2012-10-29 07:46:44
【问题描述】:

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

为了澄清对 cme​​ts 的回应:我专门指的是 Windows CRITICAL_SECTION 对象,而不是 Windows 互斥体。

【问题讨论】:

  • 递归是指它有一个计数器(就像智能指针中的引用计数器)?
  • @AlexFarber,互斥锁与临界区不同。
  • 重点是,如果不想要递归锁,就需要使用互斥锁
  • 不清楚你的目标是什么;例如,您是否试图检测尝试递归使用以将其标记为(潜在)错误?您可以添加自己的代码来为您自己的代码拥有的 critsect 执行此操作,方法是将每个代码与“正在使用”布尔值配对;或者对于仅调试代码,您可以dig into the critical section internals 检查其状态。

标签: winapi critical-section


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    临界区总是允许线程内的递归。互斥体也是如此。这是设计使然,无法更改。

    另一方面,信号量可以防止线程内的递归。详情请见MSDN documentation

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2011-04-29
      • 1970-01-01
      相关资源
      最近更新 更多