3.1.2. Ejemplo: la exclusión mutua mediante mensajes
Texto íntegro de la conversión. Las figuras y la disposición de las notas se pueden consultar en el PDF.
3.1.2. Ejemplo: la exclusión mutua mediante mensajes
Un método muy sencillo de implementar el acceso en exclusión mutua a una región crítica es mediante mensajes indirectos. En el ejemplo que se muestra a continuación, se crea un buzón que denominamos buzón. Para pedir acceso a la sección crítica, el proceso lee del buzón con la operación receive y entonces:
- Si el buzón está vacío, el proceso se queda bloqueado esperando que alguien le escriba el mensaje.
- Si el buzón está lleno, el proceso lee el mensaje, deja el buzón vacío y accede a la sección.
Nos interesa que el primer proceso que pida acceso a la sección crítica pueda pasar. Para conseguirlo, el buzón se inicializa introduciendo un mensaje de cualquier longitud. En el código que se presenta en la figura 26, el buzón desarrolla un papel equivalente al de un semáforo binario.
receive(buzón, mensaje); /* entrada exclusión mutua / / sección crítica */
...
Página 29
send(buzón, mensaje); /* salida exclusión mutua */
Figura 26. Implementación de la exclusión mutua utilizando mensajes indirectos
También sería posible implementar semáforos n-arios con buzones, así se permitiría que en el buzón pudiera haber hasta n mensajes.
Ver fragmento extraído sin normalizar
3.1.2. Ejemplo: la exclusión mutua mediante mensajes
Un método muy sencillo de implementar el acceso en exclusión mutua a una
región crítica es mediante mensajes indirectos. En el ejemplo que se muestra a
continuación, se crea un buzón que denominamos buzón. Para pedir acceso a
la sección crítica, el proceso lee del buzón con la operación receive y entonces:
• Si el buzón está vacío, el proceso se queda bloqueado esperando que al-
guien le escriba el mensaje.
• Si el buzón está lleno, el proceso lee el mensaje, deja el buzón vacío y
accede a la sección.
Nos interesa que el primer proceso que pida acceso a la sección crítica pueda
pasar. Para conseguirlo, el buzón se inicializa introduciendo un mensaje de
cualquier longitud. En el código que se presenta en la figura 26, el buzón desa-
rrolla un papel equivalente al de un semáforo binario.
receive(buzón, mensaje); /* entrada exclusión mutua */
/* sección crítica */
...
## Página 29
<!-- source-page: 29 -->
GNUFDL • PID_00214803 29 Comunicación y sincronización
send(buzón, mensaje); /* salida exclusión mutua */
Figura 26. Implementación de la exclusión mutua utilizando mensajes indirectos
También sería posible implementar semáforos n-arios con buzones, así se per-
mitiría que en el buzón pudiera haber hasta n mensajes.