持有锁的线程可以进入睡眠状态吗?

时间:2012-03-09 17:56:09

标签: mutex

我对互斥锁有疑问。

Global mutex;
/// more things
Acquire lock on mutex;
/// Do things here;
Release lock;

如果某个线程获取了互斥锁上的锁(例如,tbb互斥锁),处理器可以在保持锁定时将其置于休眠状态,稍后唤醒以完成作业,或者当它获得锁定时互斥它继续工作不间断直到释放锁?

1 个答案:

答案 0 :(得分:3)

是的,持有互斥锁的线程绝对可以进入睡眠状态,它可能会被置于睡眠状态。

如果你有一个核心,那么一个时刻只能运行一个单独的线程。如果在一个核心上运行10个线程,那么任何时候都会有9个线程处于睡眠状态。

想象一下,如果一个带有互斥锁的线程无法进入休眠状态会发生什么,那么只有那个线程才能运行,直到互斥锁被释放。即使其他九个线程不关心互斥锁保护的内容,每次取出互斥锁时,您的进程基本上都会成为单线程。