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);
}