All pastes #2118241 Raw Edit

Semforos

public text v1 · immutable
#2118241 ·published 2012-02-12 15:04 UTC
rendered paste body
Ejemplo de uso de semáforos
Suponga el siguiente ejemplo en el que se quieren sincronizar dos hilos de un proceso, de manera que se dé la siguiente secuencia de ejecución: A, B, A, B, ... y así sucesivamente. El siguiente código resolvería el problema:

semaforo a = semaforo.create(1);
semaforo b = semaforo.create(0);
 
/* código del hilo A */
while (1) {
       a.down();
       printf("hilo A\n");
       b.up();
}
 
/* código del hilo B */
while (1) {
       b.down();
       printf("hilo B\n");
       a.up();
}
----------------------------------------------------------------------------------------------
CON MI BIBLIOTECA DE CONTROL DE CONCURRENCIAS, EL PROBLEMA SE RESOLVERÍA DEL SIGUIENTE MODO:

Monitor a = new MonitorImpl();

// El método protegerPrioridad recibe 3 parámetros: Un ID en forma de String, que será el que queramos, la prioridad que le vamos a asignar a ese trozo de código y el número de trozos de código que vamos a proteger, en nuestro caso, 2.

// El método liberarPrioridad recibe 2 parámetros: El ID en forma de String y el trozo de código que vamos a liberar.
 
/* código del hilo A */
while (1) {
       a.protegerPrioridad("prueba", 1, 2);
       printf("hilo A\n");
       a.liberarPrioridad("prueba", 1);
}

 
/* código del hilo B */
while (1) {
       a.protegerPrioridad("prueba", 2, 2);
       printf("hilo B\n");
       a.liberarPrioridad("prueba", 2);
}