我打算在IPC上使用共享内存互斥。如果其中一个进程在释放互斥锁之前意外死亡,我怎样才能避免死锁条件?
我知道其中一个解决方案是使互斥锁健壮。但是,有一个glibc错误,互斥量可以随机挂起(参见https://bugzilla.redhat.com/show_bug.cgi?id=1302389#c2)。看起来这个问题并没有在我正在使用的glibc中修复。即使它是在较新版本中修复的,我也无法自由升级glibc库。
该问题是否有解决方法或是否有其他解决方案?
由于
答案 0 :(得分:0)
您可以使用sysv ipc信号量,它通常会撤消您处理死机时所执行的所有信号量操作。每个信号量上有一个每个进程计数器,用于计算在其上完成的P和V操作的净平衡,因此,如果进程终止,它可以在信号死亡时相应地调整信号量(由于信号或通过信号) exit(2)
致电)
它的缺点是消耗每个信号量和进程的资源。但它们现在包含在所有unix变种中,因此您可以移植到其他系统。