我正在尝试使用 boost 中的 shared_lock 和 unique_lock 库来实现对资源的基本读写锁。但是,一些访问资源的线程可能会简单地崩溃。我想创建另一个进程,给定一个互斥锁,监视互斥锁并跟踪哪些进程锁定了资源以及每个进程锁定了多长时间。如果进程拥有锁的时间超过给定时间段,该进程还将强制进程释放其锁。
尽管 boost 锁都是作用域锁,一旦超出作用域就会自动解锁,但如果服务器崩溃,它仍然不能解决我的问题,从而将 SIGSEGV 发送到进程并杀死它。被杀死的进程不会调用它的任何析构函数,因此不会释放它持有的任何资源。
一种可能的解决方案是以某种方式在锁上设置一个计时器,以便进程在给定的锁期后被迫释放锁。尽管这违背了锁定的概念,但它在我们的案例中是有效的,因为我们可以保证如果任何进程持有锁超过,比如说 5 分钟,那么可以说该进程要么被杀死,要么存在陷入僵局的情况。
非常感谢任何有关如何解决此问题的建议!
由于“可能重复”,我之前的帖子已关闭,但所述重复问题没有回答我的问题。