进程不能睡眠的情况:
1、进程已经持有一个自旋锁、seqlock、rcu锁
2、在进程中关闭了中断
3、除非能确保,在某处,能够找到这个进程,并且可以唤醒此进程;否则,不应进入睡眠。
使用等待队列
写数据时,如果无空间可写,则应进入睡眠,但应检查执行睡眠代码时,是否有空间可写,避免发生“先唤醒,后睡眠”,即将要执行睡眠代码时,读操作释放了空间,释放空间后会进行唤醒写操作。那么将会错过这次唤醒,导致下次唤醒时间过长或无法唤醒。
进程不能睡眠的情况:
1、进程已经持有一个自旋锁、seqlock、rcu锁
2、在进程中关闭了中断
3、除非能确保,在某处,能够找到这个进程,并且可以唤醒此进程;否则,不应进入睡眠。
使用等待队列
写数据时,如果无空间可写,则应进入睡眠,但应检查执行睡眠代码时,是否有空间可写,避免发生“先唤醒,后睡眠”,即将要执行睡眠代码时,读操作释放了空间,释放空间后会进行唤醒写操作。那么将会错过这次唤醒,导致下次唤醒时间过长或无法唤醒。