Iluminando los rincones del sin saber

Conocimientos liberados sólo para copiar y pegar, aprender y compartir es lo importante

Semaforos, algoritmos y codigo java

Semáforos

Un semáforo nos sirve para poder permitir o restringir a los procesos o hilos el acceso a algún recurso compartido.

Los semáforos cuentan con dos operaciones básicas, una de ellas es para reservarlo y la otra para liberarlo, wait (espera) y signal (señal) respectivamente, equivalente down y up.

Los semáforos pueden ser binarios o generales.

Existe una tercera operación en los semáforos, que es el inicializador, esta operación definirá si el semáforo será binario o no, es decir, si se inicializa con 1, el semáforo será binario ya que solo podrá manejar un recurso compartido, en caso de tener “N” recursos compartidos se inicializara con “N”. De igual si tenemos “N” procesos inicializamos un semáforo para que solo “N” procesos acceda a un recurso compartido.

La operación “Down” consistirá en ir decrementando el numero de recursos que posee el semáforo, cuando este contador llegue a 0, entonces el proceso quedara bloqueado en espera de que dicho contador sea liberado por medio de un “Up”.

Existen semáforos que tiene la operación de manejar una cola del tipo FIFO (PEPS) para llevar el control de los procesos que están solicitando los recursos, así cuando se liberen los recursos estos puedan asignarle dicho recurso al primer proceso que lo solicito.

Desventajas

  • No se puede imponer el uso correcto de los “Down” y “Up”
  • No existe una asociación entre el semáforo y el recurso
  • Entre “Down” y “Up” el usuario puede realizar cualquier operación con el recurso.

Algoritmo Semáforo

//Para bloquear
Down (semaforo){
__ If semaforo > 0 then
____semaforo=semaforo -1
__ else
____bloquear_el_proceso();
}

//Para liberar
Up (semaforo){
__ if hay_proceso_bloqueado then
____despertar_el_proceso()
__else
____semáforo = semáforo + 1
}

//constructor
Init (semaforo, mum)
__ semaforo=num;
end

Codificacion de Semaforo en Java

public class Semaforo {
__
__private int valor;
__
__/** Creates a new instance of Semaforo */
__public Semaforo(int v) {
____valor = v;
__}
__
__public synchronized void down(){
____while(valor <= 0){
______try{
________wait();
______}catch(InterruptedException e){
________;
______}
____}
____valor–;
__}
__public synchronized void up(){
____valor++;
____notify();
__}
}

Nota: Los “__” representan tabulaciones, ya que wordpress me pega todo a la derecha y no se puede ver bien asi.

Bibliografía utilizada

semáforos en Wikipedia

Conceptos generales

Ejemplo de productor consumidor utilizando semáforo

About these ads

3 Respuestas a “Semaforos, algoritmos y codigo java

  1. Desen Web 12 diciembre 2008 en 10:01 am

    Buen articulo, pero la nota final no es correcta. WordPress permite hacer cualquier modificación i personalización del texto.

    Saludos.

  2. ppedrodom 13 diciembre 2008 en 6:04 am

    Muchas gracias por la aclaración, es bueno saberlo, algún día de estos cuando este mas desocupado lo arreglare.

  3. estudiante 4 agosto 2009 en 3:56 pm

    Hola a todos–… el articulo est muy bueno aunque todavia tengo muchas dudas de como utilizar el semaforo en un baño mixtos…. otra duda es que quisiera tener el codigo del programa que esta hecho java…. productor consumidor… me ayudaria muchisimo.. gracias de antemano

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: