阿里面试阿里巴巴2016研发工程师笔试题(三) 第四题

题目:进程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)
		解析:同理