请在代码路径中执行以下步骤以发出条件信号:
获取用于保护条件的互斥锁。
设置条件。
使用 cv_broadcast(9F) 向阻塞的线程发出信号。
释放互斥锁。
以下示例使用繁忙标志以及互斥锁和条件变量来强制 read(9E) 例程进行等待,直到设备不再繁忙时为止,然后开始传送。
static int xxread(dev_t dev, struct uio *uiop, cred_t *credp) { struct xxstate *xsp; /* ... */ mutex_enter(&xsp->mu); while (xsp->busy) cv_wait(&xsp->cv, &xsp->mu); xsp->busy = 1; mutex_exit(&xsp->mu); /* perform the data access */ } static uint_t xxintr(caddr_t arg) { struct xxstate *xsp = (struct xxstate *)arg; mutex_enter(&xsp->mu); xsp->busy = 0; cv_broadcast(&xsp->cv); mutex_exit(&xsp->mu); }