Volver al temario
Tema 04 · 70 páginas

Comunicación y sincronización

Tema completo Modo estudio
TEXTO ORIGINAL · Páginas 2829 Ver PDF

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.


Descargar Markdown originalEstudiar este apartado