睡觉时在linux内核中持有一个互斥体

use*_*052 2 c mutex sleep linux-kernel

如果进程在持有互斥锁的情况下休眠会发生什么?例如,如果我有以下代码:

mutex_lock(mtx);
wait_event_unterruptible_timeout(wait_queue_head, condition, timeout);
//some other code
mutex_unlock(mtx);
Run Code Online (Sandbox Code Playgroud)

是否在睡眠期间释放互斥锁并在进程唤醒之前重新获取?或者该过程是否在睡觉时持有互斥锁?

谢谢

Ed *_*eal 6

互斥锁被保留.

它说它在罐子上做了什么.


Nar*_*uil 6

互斥锁不会在睡眠时释放。

在 Linux 内核中,您可以在持有互斥锁或 rw_semaphore 时休眠。另一方面,你不能在持有自旋锁或 rwlocks 时睡觉