Interprocess::named_upgradable_mutex -如果进程被杀死,则保持锁定状态



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

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

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

但是,我注意到,如果一个进程在持有互斥锁的同时被杀死(例如通过TaskManager),互斥锁仍然是锁定的。

知道如何处理过程失败吗?

我想过使用timed_lock()以防万一…还有其他想法吗?

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

当您将共享数据返回到一致状态时,请在返回到一致状态的数据中包含互斥锁或锁。最简单的方法是删除现有的锁并创建一个新锁。您可能需要为共享数据做同样的事情。

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

如果你因为某种原因杀死了你的应用程序,你可以通过从Windows注销或执行命令mutex.unlock()来解锁这个锁;

最新更新