如何在一次调用中释放多个互斥锁
Posted
技术标签:
【中文标题】如何在一次调用中释放多个互斥锁【英文标题】: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 (你的问题的标题)我已经给出了答案:你自己写那个微不足道的函数。 ;)
【参考方案1】:
Microsoft 的 Raymond Chen 可能没有写过您的确切主题,但他写过类似的其他人。正如他所说,“每个功能都以 -100 分开始。”您要求的功能没有迫切的需求;实现它的代码太短,不太可能在很多地方使用,并且在库中不会比在应用程序中更好。
人们已经抱怨 Win32 API 臃肿。很高兴他们没有添加这个。
【讨论】:
以上是关于如何在一次调用中释放多个互斥锁的主要内容,如果未能解决你的问题,请参考以下文章