【问题标题】:How to release multiple mutexes in one call如何在一次调用中释放多个互斥锁
【发布时间】:2013-12-07 10:38:52
【问题描述】:

WinAPI 为我们提供了 WaitForMultipleObjects(..) 函数。假设我们必须等待数组中的所有互斥锁,那么如果有一个函数可以在一次调用中从数组中释放捕获的互斥锁,那就太好了。是什么让微软不给我们提供这么有用的东西?在 WaitForMultipleObjects(..) 之后释放互斥量(如果它们足够多)最好的解决方案是什么?

【问题讨论】:

  • 您不需要以原子方式释放它们,因此不需要这样的功能。一次锁定大量互斥锁是非常不寻常的。等待死锁。
  • @AlanStokers 谢谢!假设我们用 WaitForMultipleObjects(..) 捕获了 5 个互斥体,一个一个地释放它们会有点混乱。
  • @user2543574 编写一个接受计数和HANDLE*(很像WaitForMultipleObjects)并在循环中释放它们的函数很简单。
  • @syam 我知道..我知道..但我很好奇微软对此有何评论?
  • 如果您想知道 为什么 他们没有提供这样的功能,那么恐怕您的问题在 SO 上是题外话,因为我们只能 推测他们的动机,而 SO 是针对可证明的事实。至于 how (你的问题的标题)我已经给出了答案:你自己写那个微不足道的函数。 ;)

标签: c++ winapi mutex release waitformultipleobjects


【解决方案1】:

Microsoft 的 Raymond Chen 可能没有写过您的确切主题,但他写过类似的其他人。正如他所说,“每个功能都以 -100 分开始。”您要求的功能没有迫切的需求;实现它的代码太短,不太可能在很多地方使用,并且在库中不会比在应用程序中更好。

人们已经抱怨 Win32 API 臃肿。很高兴他们没有添加这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-17
    • 2010-12-25
    • 2012-02-23
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    相关资源
    最近更新 更多