interprocess :: named_upgradable_mutex - 如果进程被终止,则保持锁定状态

时间:2011-12-14 09:09:34

标签: c++ boost locking interprocess robustness

我正在使用boost::interprocess::named_upgradable_mutex来同步几个进程。

我正在使用boost::interprocess::sharable_lockboost::interprocess::scoped_lock来锁定互斥锁。

测试同步时,只要进程正常工作并且正常关闭,它就会很好。

但是,我注意到如果一个进程在持有互斥锁时被杀死(例如通过TaskManager),则互斥锁保持锁定状态。

知道如何处理流程故障吗?

我考虑过使用timed_lock()以防其他想法?

2 个答案:

答案 0 :(得分:1)

你正在研究症状而不是问题。互斥的目的是允许进程或线程将共享数据置于不一致状态。如果进程在持有互斥锁时死亡,则共享数据仍处于不一致状态。问题是如何将共享数据返回到一致状态,而不是如何解锁互斥锁。

将共享数据返回到一致状态时,请在返回到一致状态的数据中包含互斥锁或锁定。最简单的方法是删除现有锁并创建一个新锁。您可能必须对共享数据执行相同的操作。

如果你真的需要这样做,我建议你可能没有使用正确的工具来完成这项工作。

答案 1 :(得分:1)

如果您因某种原因终止了应用,可以通过从Windows注销或执行命令mutex.unlock()来解锁此锁;