1.竞争不可抢占性资源
系统中所拥有的不可抢占性资源其数量不足以满足多个进程运行的需要,使得进程在运行过程中,会因争夺资源而陷入僵局。
例如:系统中有两个进程P1和P2,它们都准备写两个文件F1和F2,而这两者都属于可重用和不可抢占性资源。进程P1先打开F1,然后再打开文件F2;进程P2先打开文件F2,后打开F1:
2.竞争可消耗资源产生死锁
m1,m2,m3是可消耗资源,P1一方面产生消息m1,利用send(p2, m1)原语将它发送给P2;另一方面,它又要求从P3接收消息m3。而进程P2一方面产生消息m2,利用send(p3, m2)原语将它发送给P3;另一方面,它又需要接收进程P1所产生的消息m1。类似地,进程P3也产生消息m3,利用send(p1, m3)原语将它发送给P1,而它又要求从进程P2接收其所产生的消息m2。
这三个进程都可以先将消息发送给下一个进程,相应地它们也都能够接收到从上一个进程发来的消息,因此三个进程可以顺利地运行下去,而不会发生死锁。但若改成三个进程都先执行receive 操作,后执行send操作则这三个进程就会永远阻塞在它们的receive操作上,等待一条永远不会 发出的消息,于是发生了死锁。
3.进程推进顺序不当引发死锁
进程推进顺序合法
进程推进顺序非法
标签:P2,P1,--,send,死锁,3.5,m1,进程 From: https://blog.51cto.com/hwuu/6457077