Monitor (programación)

Un monitor es un enfoque para sincronizar dos o más tareas que usan recursos compartidos, generalmente dispositivos separados (impresoras) o conjuntos de variables.

En el pasado, los sistemas operativos se reducían a un simple programa de monitoreo que encadenaba la ejecución de otros (por ejemplo, el DOS de IBM 360 a fines de la década de 1960). Este significado es inusual hoy en día y no tiene nada que ver con el significado actual (sincronización).

Exclusión mutua

Un monitor se compone de:

Ejemplos de uso de monitores en Java

Considere dos hilos que desean comunicarse entre sí. El primer hilo envía mensajes al segundo hilo a través de una cola . Si la cola está vacía, el segundo hilo debe esperar un nuevo mensaje. Dicha cola se puede implementar usando el siguiente código:

import java.util.*; public class EchangeMessage { private ArrayList l = new ArrayList(); public void enfiler(Object o) { l.add(o); if(l.size()==1) { try { this.notify(); } catch (IllegalMonitorStateException e) {} } } public Object defiler() { if(l.size()==0) { try { this.wait(); } catch (InterruptedException e){} } Object o = l.get(0); l.remove(0); return o; } public synchronized boolean vide() { return l.isEmpty(); } }
Esta clase usa tres métodos.
  • El método del hilo agrega un dato en la cola y si la cola estaba vacía antes, entonces libera una posible tarea que esperaría.
  • El método de desplazamiento lee un valor de la cola. Si no hay datos disponibles, se pone en espera.
  • El método vacío le permite saber si la cola está vacía.

Es posible hacer las siguientes observaciones sobre el funcionamiento de Java en relación con este ejemplo:

  • Los monitores Java no funcionan con FIFO . Esto significa que no es necesariamente la tarea que ha estado esperando más tiempo la que se despertará primero.
  • Los monitores deben usarse en bloques sincronizados. El bloqueo asociado con la sincronización se devuelve implícitamente cuando se pone en espera y se recupera automáticamente cuando se activa la tarea.

Ver también