进程P1和P2,资源A和B,进程对资源的操作定义如下:读取资源A:rA;读取资源B:rB;写入资源A:wA;写入资源B:wB。同时规定,进程读取某一资源前,必须加上共享锁,写入某一资源前必须加上排他锁;资源在被进程加共享锁时,可以被其他进程继续加共享锁,但不能加排他锁;资源在被进程加排他锁时,其他进程无法加锁。进程完成全部操作后释放锁。进程P1和进程P2并发执行,如下哪种运行序列可能会出现死锁
第一个选项:P1(rA->rB), P2(rA->wB)
解析:p1、p2可以同时申请A资源(共享锁),都申请A资源后,p2申请独占B资源(因为排它锁)
当线程p2使用完B资源,并将其释放,然后线程p1就可以继续使用,则无死锁
第二个选项:P1(rA->rB), P2(wA->rB)
解析:先看p2,当p2独占A资源,p1是无法申请到A资源,p2继续申请B资源,使用完并将其释放
然后线程p1又可以继续工作,则无死锁。
第三个选项:P1(wB->rA), P2(rA->rB)
解析:先看p1,当p1独占B资源,又会申请A资源,与此同时,p2也申请到A资源,但当它要去申请B资源的时候
发现B资源被p1独占,所以只有等p1使用完释放之后,p2才可以工作,所以不会死锁。
第四个选项:P1(wB->rA), P2(wA->rB)
解析:p1线程独占B资源,想要去申请A资源,然而p2独占A资源,又想去申请B资源,这样彼此等待彼此,造成死锁。
第五个选项:P1(wA->wB), P2(wA->wB)
解析:假设p1先独占A资源,p2也想独占A资源,但是A资源被p1独占,所以需要等p1使用完释放
p2才能得到A资源,所以p1独占A资源之后又独占B资源,使用完释放,p2也可以继续工作,则无死锁。
第六个选项:P1(wA->rB), P2(wA->wB)
解析:同理