Oracle® Solaris 11.2 デバイスドライバの記述

印刷ビューの終了

更新: 2014 年 9 月
 
 

cv_wait_sig() 関数

発生する可能性がない条件や、長期間にわたって発生しない条件をドライバが待機している場合があります。そのような場合、ユーザーがシグナルを送信してスレッドを終了させることができます。ドライバの設計によっては、シグナルを送信してもドライバが復帰しない可能性があります。

cv_wait_sig(9F) を使用すると、シグナルによってスレッドのブロックを解除できます。ユーザーは kill(1) を使用してシグナルをスレッドに送信するか、または割り込み文字を入力することによって、長期に及ぶ可能性がある待機を解除できます。cv_wait_sig(9F) は、シグナルを送信してから戻る場合は 0 を返し、条件が発生した場合は 0 以外を返します。ただし、シグナルを受信できないケースも存在します。Threads Unable to Receive Signalsを参照してください。

次の例は、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);