down_interruptible () es una función de la cantidad de señal procesada. Su valor de retorno de cada tres 1. "0" 2. "-ETIME" 3. "- EINTR"
0 representa un rendimiento normal
Tiempo de espera de -ETIME
ruptura -EINTR
Obras función:
Si SEM> contador> 0 (para permitir el acceso al semáforo)
Return 0 (rendimiento normal)
De lo contrario, espere.
código fuente del kernel para
Haga clic (aquí) plegada o desplegada
- int down_interruptible (struct semáforo * SEM)
- {
- unsigned long flags;
- int resultado = 0;
- spin_lock_irqsave (y SEM> cerradura, banderas); // spinlock
- si (probable (SEM> contador> 0))
- SEM> count--;
- más
- resultar = __down_interruptible (sem); // espera para entrar
- spin_unlock_irqrestore (y SEM-> bloqueo, banderas);
- return resultado;
- }
__down_interruptible ()
Llamar __down_common ()
__down_common () tiene un bucle for
-EINTR devuelve cuando una señal de interrupción para volver -ETIME a la espera de un tiempo de espera.
Devolver 0 convertido semáforo accesible
Por cierto, la cantidad de la señal son diferentes, deben distinguirse.
Descripción imagen:
Llegas a casa desde la escuela, hambriento, quiere comer, se fue a la cocina para ver si no hay nada para comer (comer semáforo), si hay ya preparada comida (señal no está ocupada), que vaya inmediatamente a comer (return 0) Si la mamá está haciendo (semáforos en uso), se dice que después de que se despertó con la madre dijo a hacer el bien, primero ir a la cama (sueño), mientras que la sala tiene un reloj de alarma (otras señales), si el arroz cuando no lo hacen, sonó el despertador, que se despertó (retorno -EINTR), o bien esperar hasta que mi madre finalmente se despierta buena comida (también devuelve 0), el estado de tiempo de espera no se tiene en cuenta.