驱动程序可能正在等待不会产生或长时间不会发生的条件。在此类情况下,用户可发送信号中止该线程。根据驱动程序设计,信号可能无法将驱动程序唤醒。
cv_wait_sig(9F) 允许使用信号解除阻塞线程。借助此功能,用户可以通过使用kill(1) 向线程发送信号或键入中断字符,从而免于可能的长时间等待。如果 cv_wait_sig(9F) 由于收到信号而返回,则会返回零;如果条件发生,则返回非零值。但是,对于可能未收到信号的情况,请参见线程无法接收信号。
以下示例说明如何使用 cv_wait_sig(9F) 以允许使用信号解除阻塞线程。
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);