pthread进程共享互斥锁死锁

时间:2015-06-11 01:46:51

标签: pthreads mutex deadlock multiprocess

我在共享内存上使用进程共享pthread_mutex_t。我想知道如果一个进程锁定互斥锁并以某种方式退出,会发生什么?正如我的实验所示,发生了死锁,但这是一个坏消息。那么有办法防止这种情况发生吗?进程退出时,互斥锁不应自动解锁吗?

1 个答案:

答案 0 :(得分:3)

不,互斥锁不应自动解锁,因为互斥锁保护的共享数据可能处于不一致状态。

如果要处理这种情况,则需要使用“强大的互斥锁”。要创建强大的互斥锁,请在用于初始化互斥锁的PTHREAD_MUTEX_ROBUST对象上使用pthread_mutexattr_setrobust()将互斥锁健壮性属性设置为pthread_mutexattr_t

如果线程或进程在保留健壮的互斥锁时退出,则对该互斥锁的pthread_mutex_lock()的下一次调用将返回EOWNERDEAD错误。如果返回此错误,则代码必须仔细检查互斥锁保护的所有共享状态并修复任何不一致。然后,它可以通过调用互斥锁上的pthread_mutex_consistent()将状态标记为一致,然后继续正常执行。

相关问题