System 操作系统:如果一个进程一次只能锁定一个互斥锁,是否可能出现死锁?

System 操作系统:如果一个进程一次只能锁定一个互斥锁,是否可能出现死锁?,system,mutex,deadlock,System,Mutex,Deadlock,在不允许嵌套锁定的操作系统中是否可能出现死锁,这样一个进程一次只能锁定一个互斥锁 我认为这是不可能的,因为对于获取另一个锁的进程来说,它需要释放它所持有的任何锁。但我对僵局的情况不太熟悉。我的逻辑正确吗 谢谢。这取决于您如何定义锁,如果您指的是任何有可能阻塞的活动,那么是的,如果一次只能使用一个锁,则不可能出现死锁,这是正确的。如果您只是指显式创建的互斥体和信号量,死锁仍然是可能的,因为除了使用锁之外,还有其他可能导致阻塞的事情 然而,据我所知,只有旧的操作系统实现了类似的功能,它们对所有共享资

在不允许嵌套锁定的操作系统中是否可能出现死锁,这样一个进程一次只能锁定一个互斥锁

我认为这是不可能的,因为对于获取另一个锁的进程来说,它需要释放它所持有的任何锁。但我对僵局的情况不太熟悉。我的逻辑正确吗


谢谢。

这取决于您如何定义锁,如果您指的是任何有可能阻塞的活动,那么是的,如果一次只能使用一个锁,则不可能出现死锁,这是正确的。如果您只是指显式创建的互斥体和信号量,死锁仍然是可能的,因为除了使用锁之外,还有其他可能导致阻塞的事情


然而,据我所知,只有旧的操作系统实现了类似的功能,它们对所有共享资源只有一个锁,并且实际上只允许一个线程同时出现在内核空间中。这会导致多核系统的性能非常差,最好在现代多核或多cpu系统中使用其他技术,如有序锁获取和超时,而不是恢复使用此技术。

感谢您的回复。将显式创建互斥锁,但进程无法获取另一个互斥锁,除非它首先释放它所持有的互斥锁(如果有的话)。在这种情况下怎么可能出现死锁?我想我理解你现在所说的,如果一个进程通过另一种方法(如信号)被阻塞,或者内核改变了进程状态,那么它仍然会持有互斥锁,这可能会导致死锁。正确吗?@Kanchobi确切地说,进程可能会阻塞的原因有很多,除了尝试获取互斥外,他们可能会尝试使用隐式阻塞的硬件外围设备,或者进程可能会在保持它而不释放它的情况下无限期崩溃/挂起。不幸的是,在一个正常的多任务系统中,我们无法控制所有进程阻塞的来源,因此必须对其进行适当的管理。@Kanchobi举个例子(尽管是一个不寻常的例子),请参见此处,了解如何通过简单地运行指令来阻塞进程,更不用说获取锁了。