1

在 Linux 中,假设我有 100 个线程的代码。其中 5 个线程争夺受互斥锁保护的共享资源。我知道,当关键部分实际运行时,只有 5 个线程在尝试获取锁时会停止执行,而其他 95 个线程将毫无问题地运行。

我的问题是,其他 95 个线程的执行是否会暂停或受到影响,即当互斥锁/内核/任何东西确定哪些线程在互斥锁上被阻塞,哪些线程应该获得锁,哪些线程应该能够运行,因为他们不要求锁等

4

1 回答 1

6

不,其他线程不受影响。

内核不会询问哪些线程受到锁的影响。每个线程在尝试获取锁时都会告诉内核。

当线程这样做时,它们会进入睡眠状态并进入与锁相关的特殊唤醒队列。

不使用锁的线程不会与使用锁的线程进入同一个队列,因此它们的阻塞行为是不相关的。

于 2013-03-29T14:03:10.613 回答