我正在使用linux,而且我正在使用pthread_rwlock,它存储在共享内存中并通过多个进程共享。这大部分工作正常,但是当我在锁定时终止进程(SIGKILL)时,看起来仍然保持锁定(无论它是读还是写锁)。
有没有办法识别这种状态,甚至可能修复它?
答案 0 :(得分:1)
真正的答案是找到一个合适的方法来阻止一个过程。用SIGKILL
杀死它是不这是一个体面的方法。
此功能是为mutexes指定的,称为健壮性(PTHREAD_MUTEX_ROBUST
),但不适用于rwlocks 。标准没有提供它,kernel.org甚至没有关于rwlocks的页面。所以,就像我说的那样:
答案 1 :(得分:1)
@cnicutar - “真正的答案”非常可疑。内核的工作是处理释放资源的过程责任,并确保事物标记一致 - 当出现问题时,用户空间无法有效地完成工作。
如果每个人都玩得很好,那么就不需要强大的功能,但是对于一个强大的系统,你要确保系统不会从一些错误的客户端进程中消失。