编写设备驱动程序

cv_wait_sig() 函数

驱动程序可能正在等待不会产生或长时间不会发生的条件。在此类情况下,用户可发送信号中止该线程。根据驱动程序设计,信号可能无法将驱动程序唤醒。

cv_wait_sig(9F) 允许使用信号解除阻塞线程。借助此功能,用户可以通过使用kill(1) 向线程发送信号或键入中断字符,从而免于可能的长时间等待。如果 cv_wait_sig(9F) 由于收到信号而返回,则会返回零;如果条件发生,则返回非零值。但是,对于可能未收到信号的情况,请参见线程无法接收信号

以下示例说明如何使用 cv_wait_sig(9F) 以允许使用信号解除阻塞线程。


示例 3–3 使用 cv_wait_sig()

mutex_enter(&xsp->mu);
while (xsp->busy) {
        if (cv_wait_sig(&xsp->cv, &xsp->mu) == 0) {
        /* Signaled while waiting for the condition */
                /* tidy up and exit */
                mutex_exit(&xsp->mu);
                return (EINTR);
        }
}
xsp->busy = 1;
mutex_exit(&xsp->mu);