进程/线程死锁产生的原因以及如何避免死锁

线程死锁产生的必要条件:

1)互斥条件:一个资源每次只能被一个进程使用。 

2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 

3)不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 

4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

 

如何避免死锁,这点我觉得Erlang模型值得参考。在编程过程中,有一些避免死锁的经验:

(1) 等待某个资源时,使用超时机制(例如Erlang中的receive可以加一个超时);

(2) 采用消息通信的通信机制,而不是共享内存的通信机制(例如Erlang中进程和进程之间一般可以通过发送消息来通信)。

posted @ 2015-11-16 01:19  土肥圆  阅读(646)  评论(0编辑  收藏  举报