你的命题好像就有一些问题,死锁只有在两个进程相互等待对方正在使用的资源的时候才会发生,如果只有一个资源,无法构成死锁。
比如两个互斥对象 Mutex A; Mutex B;
两个进程 1, 2 分别有如下调用
进程1
A.WaitOne();
B.WaitOne();
//Code for process 1
B.ReleaseMutex();
A.ReleaseMutex();
进程2
B.WaitOne();
A.WaitOne();
//Code for process 2
A.ReleaseMutex();
B.ReleaseMutex();
现在我们假设 进程1 已经执行了 A.WaitOne(); 这时操作系统的进程时间片用完了,进程1被挂起,
进程2开始执行,由于B还没有被进程1使用,进程2 成功执行了 B.WaitOne(); 接下来执行 A.WiatOne() 时由于进程1已经占有了A,进程2挂起等待进程1释放A。这时进程1重新被调度,接下来执行 B.WaitOne();而B 又被进程2使用着,A需要等待进程2释放B,于是相互都等待对方释放对象,这时才产生死锁的现象。死锁产生后,只要其中一个进程被强制结束,死锁就会解除。具体原因我就不细说了。