📜  门| GATE-CS-2017(套装1)|第 54 题

📅  最后修改于: 2021-09-25 04:51:11             🧑  作者: Mango

多线程程序 P 使用 x 个线程执行,并使用 y 个锁来确保在共享内存位置上操作时的互斥。程序中的所有锁都是不可重入的,即如果一个线程持有一个锁 l,那么它不能重新获取锁 l 而不释放它。如果线程无法获取锁,它会阻塞直到锁可用。最小值
x 的值和 y 的最小值一起执行 P 可能导致死锁是:
(A) x = 1, y = 2
(B) x = 2, y = 1
(C) x = 2, y = 2
(D) x = 1, y = 1答案: (D)
说明:可重入(递归)锁允许线程重新获取锁。这意味着同一个进程可以多次申请锁而不阻塞自己。这可以防止线程自身死锁。这是重入锁相对于非重入锁的主要优势。

不可重入(Non-recursive)锁不允许线程重新获取锁。这意味着同一个进程不能在不释放锁的情况下多次声明锁。因此,如果线程/进程无法获取锁,它会阻塞直到锁可用。这种局面陷入僵局。

因此,如果线程确实尝试重新获取锁,则只有一个线程和只有一个锁会导致死锁。

当我们有多个进程或一个锁时,进程/线程可以获取另一个锁以继续进行,或者其他进程/线程可以获取锁以继续进行。

此解释由Mithlesh Upadhyay 提供。
这个问题的测验