Guía Informal al Bloqueo | ||
---|---|---|
Anterior | Capítulo 2. Dos Tipos Principales de Bloqueos del Núcleo: Spinlocks y Semáforos | Siguiente |
Si tienes una estructura de datos que siempre es accedida desde el contexto de usuario, entonces puedes usar un semáforo simple (linux/asm/semaphore.h) para protegerla. Este es el caso más trivial; inicializas el semáforo al número de recursos disponibles (usualmente 1), y llamas a down_interruptible() para coger el semáforo, y up() para liberarlo. Hay también una función down(), que debería de ser evitada, porque no regresará si se recibe una señal.
Ejemplo: linux/net/core/netfilter.c permite el registro de unas nuevas llamadas setsockopt() y getsockopt(). El registro y desregistro sólo son realizadas en la carga y descarga de un módulo (y tiempo de arranque, donde no hay concurrencia), y la lista de registros sólo es consultada por una llamada al sistema desconocida setsockopt() o getsockopt(). La nf_sockopt_mutex es perfecta para proteger esto, especialmente desde que las llamadas setsockopt y getsockopt quizás se vayan a dormir. sleep.