死锁场景示例?
Deadlock scenario examples?
您能否举例说明 2 个进程(进程 A 和进程 B)之间的死锁场景,其中每个进程都需要访问资源文件 A、文件 B 和文件 C。提供一个允许这 2 个进程的场景陷入僵局?
我将如何解决死锁情况?
我将如何防止它发生?
预防费用是多少?
由于缺乏经验,我想不出一个场景。
以两个进程A和B为例。另外,当进程试图访问文件系统时,采取一般准则,它需要获取资源锁,然后才能访问文件系统。当一个进程获取资源锁时,其他进程无法获取相同的资源锁,因此无法访问文件系统。此外,锁由永远等待 属性 的信号量处理,因此当一个进程试图获取一个锁但它不可用时,它将永远等待,而不会继续(处于挂起状态)。
进程 A 将访问文件系统 A。它为其获取锁,并正在处理它。由于上下文切换,它脱离了上下文。
现在进程 B 将要访问文件系统 B。它为其获取锁,并正在处理它。由于上下文切换,它脱离了上下文。
现在进程A在没有释放文件系统A的锁的情况下,尝试获取文件系统B的锁,锁不可用,因此进入pending状态,不再进行。
现在进程B被调度了,它又一次没有释放文件系统B的锁,试图为文件系统A获取锁。锁不可用,所以它会进入挂起状态,并且不会继续。
所以一个进程持有另一个进程继续执行所需的资源,因此两个进程现在都处于死锁状态。
您能否举例说明 2 个进程(进程 A 和进程 B)之间的死锁场景,其中每个进程都需要访问资源文件 A、文件 B 和文件 C。提供一个允许这 2 个进程的场景陷入僵局?
我将如何解决死锁情况? 我将如何防止它发生? 预防费用是多少?
由于缺乏经验,我想不出一个场景。
以两个进程A和B为例。另外,当进程试图访问文件系统时,采取一般准则,它需要获取资源锁,然后才能访问文件系统。当一个进程获取资源锁时,其他进程无法获取相同的资源锁,因此无法访问文件系统。此外,锁由永远等待 属性 的信号量处理,因此当一个进程试图获取一个锁但它不可用时,它将永远等待,而不会继续(处于挂起状态)。
进程 A 将访问文件系统 A。它为其获取锁,并正在处理它。由于上下文切换,它脱离了上下文。
现在进程 B 将要访问文件系统 B。它为其获取锁,并正在处理它。由于上下文切换,它脱离了上下文。
现在进程A在没有释放文件系统A的锁的情况下,尝试获取文件系统B的锁,锁不可用,因此进入pending状态,不再进行。
现在进程B被调度了,它又一次没有释放文件系统B的锁,试图为文件系统A获取锁。锁不可用,所以它会进入挂起状态,并且不会继续。
所以一个进程持有另一个进程继续执行所需的资源,因此两个进程现在都处于死锁状态。