【发布时间】:2014-05-28 19:58:45
【问题描述】:
目前我正在用 C++ 将软件从 Windows 移植到 Mac OS X。
在 Windows 中,全局命名互斥体中存在废弃状态,这意味着互斥体的当前所有者进程已消失,而未释放互斥体。 (很可能是应用崩溃造成的)
由于存在废弃状态,尝试为废弃互斥锁加锁不会导致死锁。
如果没有被放弃的状态,它将永远等待不属于任何人的互斥体。
还有另一种方法,如果在一定时间内无法获得互斥锁,则使用超时假设互斥锁被放弃,但与放弃互斥锁相比,它不是一个完美的解决方案。在最坏的情况下,两个进程意外地可以访问被互斥锁锁定的对象。
在 Mac OS X/Linux 中是否有任何互斥支持放弃状态?
我研究了 boost 库,boost 库有一个命名互斥体,但那个是基于共享文件的,所以它没有放弃状态。
请给我一些建议。
【问题讨论】:
-
只是发布链接不是明确的答案 - 但您可能会研究 pthread 静音,包括强大的互斥锁。请参阅本主题中的 cmets:stackoverflow.com/questions/4424193/…
-
嗨orpheist!感谢您的回答!我看了一下健壮的 pthread,但它看起来不支持进程间锁定......我开始觉得解决方案可能是信号量(我找不到它是否像健壮的 pthread 一样健壮),或者使用文件锁定(将被释放在进程崩溃时)。我需要更多的研究......无论如何,非常感谢!
标签: c++ linux macos mutex interprocess