互斥锁是否会在任何时候阻塞所有线程?

时间:2013-03-29 13:59:06

标签: linux multithreading concurrency

在Linux中,假设我有100个线程的代码。其中5个线程在受互斥锁保护的共享资源上竞争。我知道当关键部分实际运行时,如果他们尝试获取锁定而其他95个线程将​​在没有问题的情况下运行,则只有5个线程可能会停止执行。

我的问题是,其他95个线程的执行是否会被暂停或影响,即当互斥锁/内核/无论什么时候确定哪些线程在互斥锁上被阻塞以及哪个线程应该获得锁定,以及哪些线程应该能够运行,因为他们没有要求锁等等

1 个答案:

答案 0 :(得分:3)

没有

内核不会询问哪些线程受锁影响。当线程尝试获取锁时,它们会进入休眠状态并进入与锁相关的特殊唤醒队列。

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