第四章 锁定和并发控制(四)
避免死锁
增量锁定具有潜在危险,因为它可能导致称为死锁的情况。当两个进程各自对已被另一个进程锁定的变量断言增量锁定时,就会出现这种情况。因为尝试的锁是增量的,所以现有的锁不会被释放。结果,每个进程在等待另一个进程释放现有锁的同时挂起。
举个例子:
- 进程
A
发出此命令:lock + ^MyGlobal(15)
- 进程
B
发出此命令:lock + ^MyOtherGlobal(15)
- 进程
A
发出此命令:lock + ^MyOtherGlobal(15)
此 LOCK
命令不返回;进程被阻塞,直到进程 B
释放这个锁。