Gente! Comparto mi solución para la parte A) de este problema. Explico lo que hice:
Cada proceso P tiene un id mayor que 0. Un proceso auxiliar AUX administra el permiso para acceder a la sección crítica.
Cada proceso P envía a AUX su id cuando quiere ingresar a la sección, y luego hace un receive esperando el permiso. AUX le otorga permiso enviandole NULL. Luego de que P recibe y pasa por la sección, envía a AUX el valor 0 avisando que salió de la sección crítica.
AUX por su parte mantiene una cola de identificadores y un booleano "usando" que se pone en true si la seccion está siendo usada por algún proceso.
AUX repite el siguiente Loop: recibe un numero. Si es un id es porque alguien quiere entrar a la sección. En ese caso, si no hay nadie en la sección, le envía NULL al proceso, sino pone el id en la cola.
Si en cambio AUX recibe 0, es porque alguien salió de la sección. En ese caso, si hay algún id en la cola le envía permiso al proceso de ese id. Sino pone usando en false.
Quedó atento a cualquier crítica o aporte. Dejo planteadas dos preguntas:
1) Yo usé una estrutura de tipo Cola en el proceso AUX, ¿podemos hacer esto? Me refiero a usar estructuras de datos como Cola o Lista, así como sus operaciones (cola.is_empty(), por ejemplo)
2) Yo supuse que los mensajes son de tipo Integer. En este caso, ¿enviar el valor NULL es lo mismo que enviar el valor 0?.
Saludos.