如何使用wake_up_interruptible

Ale*_*x F 6 linux-kernel

我想知道如果它返回void我怎么能使用wake_up_interruptible:http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/wait.h#L161(_wake_up function返回void).例如,down_interruptible函数返回int:http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/kernel/semaphore.c#L75这允许编写此类代码,例如:

if ( down_interruptible(&dev->sem) )
    return -ERESTARTSYS;
// continue: down_interruptible succeeded
Run Code Online (Sandbox Code Playgroud)

当我调用wake_up_interruptible并且它被中断时,如果它返回void,我怎么知道呢?

Rab*_*ber 6

我想正常的使用场景是,在一个线程中:

for (;;) {
   wait_event_interruptible(wait_queue, condition);
   /* Some processing */
}

并从其他一些线程:

if (something_happened)
   wake_up_interruptible(wait_queue);

这将导致在一个过程中从wait_queue它处于TASK_INTERRUPTIBLE状态被唤醒并evalueatecondition

在这里看到一些更多的例子,有点过时的位给出了一个想法