Algoritmos clásicos de concurrencia y sincronización

He visto en esta wiki una buena página con algoritmos muy típicos resueltos en pseudocódigo y C usando semáforos; creo que me va a venir muy bien para ir preparando la asignatura de Programación Concurrente.. además me ha recordado la existencia de The Little Book of Semaphores, que tenía pensado leer hace meses y había olvidado por completo.

Me ha encantado esta solución al problema de los lectores y escritores; es bien simple, pero efectiva:

Lector:

reader() {
  P(MUTEX);
  readers++;
  if(readers == 1) P(W);
  V(MUTEX);
  read;
  P(MUTEX);
  readers--;
  if(readers == 0) V(W);
  V(MUTEX);
}

Escritor:

writer() {
  P(W);
  write;
  V(W);
}

Valores iniciales:

semaphore(MUTEX, 1);
semaphore(W, 1);
readers = 0;

PD: he estado varias horas recorriendo el blog asociado a dicha wiki; creo que es bastante recomendable echarle un vistazo, seguro que encontrais algo interesante 🙂

3 Comments »

  1. 1

    Hombre, gracias por poner esto. Justo estaba casi en lo mismo.

    Un saludo!

    Like

  2. […] Algoritmos clásicos de concurrencia y sincronización […]

    Like

  3. 3
    DaniFP Says:

    Gracias a tí, que me viene de perlas lo que has escrito de Java y programación concurrente 🙂

    Like


RSS Feed for this entry

Leave a comment