pthread_rwlock跨进程:崩溃后修复?

时间:2011-07-05 08:55:55

标签: linux locking pthreads

我正在使用linux,而且我正在使用pthread_rwlock,它存储在共享内存中并通过多个进程共享。这大部分工作正常,但是当我在锁定时终止进程(SIGKILL)时,看起来仍然保持锁定(无论它是读还是写锁)。

有没有办法识别这种状态,甚至可能修复它?

2 个答案:

答案 0 :(得分:1)

真正的答案是找到一个合适的方法来阻止一个过程。用SIGKILL杀死它是这是一个体面的方法。

此功能是为mutexes指定的,称为健壮性(PTHREAD_MUTEX_ROBUST,但不适用于rwlocks 。标准没有提供它,kernel.org甚至没有关于rwlocks的页面。所以,就像我说的那样:

  • 找到另一种方法来停止这个过程(可能是另一个可以处理的信号?)
  • 退出时释放锁定

答案 1 :(得分:1)

@cnicutar - “真正的答案”非常可疑。内核的工作是处理释放资源的过程责任,并确保事物标记一致 - 当出现问题时,用户空间无法有效地完成工作。

如果每个人都玩得很好,那么就不需要强大的功能,但是对于一个强大的系统,你要确保系统不会从一些错误的客户端进程中消失。