【发布时间】:2012-09-08 11:30:13
【问题描述】:
This thread 在解释如何使用 Boost 实现读取器/写入器锁时非常出色。它看起来相对简单,我真的很喜欢它,但它似乎也使用了非命名锁,我需要一个进程间解决方案(不需要可移植,可以仅限 Windows)。
有没有办法拥有一个进程间shared_mutex?我看到有一个 named_mutex,但我无法让它与 shared_lock 其他锁一起使用。
感谢任何指针。
[编辑]
与此同时,我遇到了this thread,它几乎一针见血。我有两个问题:
- 它没有显示完整的代码(我猜我需要使用
named_upgradable_mutex,但我不太确定)和 - 我不喜欢修改后的“编写器”的答案,它不使用在析构函数中解锁的现成类,而是对互斥锁进行 3 次原始调用的序列。
仍然欢迎评论或好的解决方案。
【问题讨论】:
-
请注意,即使使用 scoped_lock 或 shared_lock 也不能保护您在程序崩溃时不让进程间互斥锁处于锁定状态。我发现我需要编写一个实用程序来调用 boost::interprocess::named_upgradable_mutex::remove(),以便在发生此类事件后清理互斥锁。在 linux 上,这似乎调用了 shm_unlink(),尽管我不确定这就是它所做的全部。顺便说一句,您可以在 /dev/shm/ 中看到您的命名锁。
标签: c++ boost boost-interprocess