日期:2014-05-16  浏览次数:20883 次

请问怎么防止pthread_mutex_lock锁定一个被另一个线程已经锁定的mutex变量时出现死锁?谢谢
想要的结果是阻塞直到另一个线程pthread_mutex_unlock,而不是一直死锁,或者出现为定义的结果。谢谢

------解决方案--------------------
只有当两个线程交叉锁定两个 mutex 然后互相等待时才会出现死锁。楼主的命题不成立。
------解决方案--------------------
pthread_mutex_lock锁定一个被另一个线程已经锁定的mutex变量时不会出现死锁..
1.如果互斥类型为:快速互斥,加锁线程被阻塞直至拥有互斥的线程解锁为止.
2.如果互斥类型为:检错互斥,加锁线程不被阻塞,立即返回一个出错代码EDEADLK.
3.如果互斥类型为:递归互斥,加锁线程成功返回并且增加调用线程在互斥上加锁的次数.
所以在一个已经加锁的互斥上再加锁,不会出现死锁,不能够成死锁的条件.

------解决方案--------------------
楼上说的错了吧……
------解决方案--------------------
在使用互斥锁的时候加入条件变量的使用。
------解决方案--------------------
同意狒狒,楼主的命题不成立。