我正在使用boost::interprocess::named_upgradable_mutex
来同步几个进程。
我使用boost::interprocess::sharable_lock
和boost::interprocess::scoped_lock
来锁定互斥锁。
在测试同步时,只要进程正常工作并且正常关闭,它看起来就很好。
但是,我注意到,如果一个进程在持有互斥锁的同时被杀死(例如通过TaskManager),互斥锁仍然是锁定的。
知道如何处理过程失败吗?
我想过使用timed_lock()
以防万一…还有其他想法吗?
你在治标不治本。互斥锁的目的是允许进程或线程将共享数据置于不一致的状态。如果进程在持有互斥锁时死亡,则共享数据仍处于不一致状态。问题是如何将共享数据返回到一致状态,而不是如何解锁互斥锁。
当您将共享数据返回到一致状态时,请在返回到一致状态的数据中包含互斥锁或锁。最简单的方法是删除现有的锁并创建一个新锁。您可能需要为共享数据做同样的事情。
如果你真的需要这样做,我建议你可能没有使用正确的工具来完成这项工作。
如果你因为某种原因杀死了你的应用程序,你可以通过从Windows注销或执行命令mutex.unlock()来解锁这个锁;