En el caso de los semáforos, podemos establecer un número máximo de hilos que pueden tener acceso simultáneo a un recurso compartido en específico; es decir, es una variable especial que constituye el método clásico para restringir o permitir el acceso a recursos compartidos.
Cada vez que un hilo intenta utilizar el recurso compartido, existe un contador que se va decrementando en uno y lo deja pasar. En el momento en que el contador se convierte en cero, deja bloqueado al hilo que intentó el acceso.
Inicia(Semáforo s, Entero v)
{
s = v; // Declara el contador
de tipo entero
}
P(Semáforo s)
{
if(s>0) // Si aún no se ha
excedido el número permitido deja pasar el hilo
s = s-1; // Decrementa el contador
else // Si ya se tiene el
número permitido de hilos ejecutándose
wait();
// Deja el hilo en espera
}
V(Semáforo s)
{
if(!procesos_bloqueados)
s = s+1;
else
signal();
}
Un tipo simple de semáforo es el binario, que puede tomar los valores de 0 y 1. Se inicializa en 1 y son usados
cuando solo un proceso puede acceder a un recurso a la vez. Son esencialmente lo mismo que el mutex.
No hay comentarios:
Publicar un comentario