我正在使用boost::interprocess::named_upgradable_mutex
来同步几个进程。
我正在使用boost::interprocess::sharable_lock
和boost::interprocess::scoped_lock
来锁定互斥锁。
测试同步时,只要进程正常工作并且正常关闭,它就会很好。
但是,我注意到如果一个进程在持有互斥锁时被杀死(例如通过TaskManager),则互斥锁保持锁定状态。
知道如何处理流程故障吗?
我考虑过使用timed_lock()
以防其他想法?
答案 0 :(得分:1)
你正在研究症状而不是问题。互斥的目的是允许进程或线程将共享数据置于不一致状态。如果进程在持有互斥锁时死亡,则共享数据仍处于不一致状态。问题是如何将共享数据返回到一致状态,而不是如何解锁互斥锁。
将共享数据返回到一致状态时,请在返回到一致状态的数据中包含互斥锁或锁定。最简单的方法是删除现有锁并创建一个新锁。您可能必须对共享数据执行相同的操作。
如果你真的需要这样做,我建议你可能没有使用正确的工具来完成这项工作。
答案 1 :(得分:1)
如果您因某种原因终止了应用,可以通过从Windows注销或执行命令mutex.unlock()来解锁此锁;