Monitor (concorrência)

Em computação concorrente, monitor é uma técnica para sincronizar duas ou mais tarefas que compartilham um recurso em comum, geralmente um dispositivo de hardware ou uma região da memória. Com um modelo de concorrência baseado em monitores, o compilador ou o interpretador podem inserir mecanismos de exclusão mútua transparentemente em vez do programador ter acesso às primitivas para tal, tendo que realizar o bloqueio e desbloqueio de recursos manualmente.

Foi inventado por Per Brinch Hansen, originalmente implementado na linguagem Concurrent Pascal e usada para estruturar a comunicação entre processos na linguagem Solo.

O monitor consiste de um conjunto de procedimentos para permitir a manipulação de um recurso compartilhado, uma trava de exclusão mútua, as variáveis associadas ao recurso e uma invariante que define as premissas para evitar disputa de recursos.

O exemplo a seguir demonstra o uso de um monitor para realizar transações de banco:

Monitor conta_bancária
   Inteiro balanço ← 0
   
   Rotina saque( Inteiro quantia )
      Se quantia < 0 Então
         erro "Quantia não pode ser negativa"
      Senão Se balanço < quantia Então
         erro "Saldo insuficiente"
      Senão
         balanço ← balanço - quantia
      FimSe
   FimRotina
   
   Rotina depósito( Inteiro quantia )
      Se quantia < 0 Então
         erro "Quantia não pode ser negativa"
      Senão
         balanço ← balanço + quantia
      FimSe
   FimRotina
FimMonitor

Nesse caso, a invariante do monitor simplesmente define que o balanço deve refletir todas as operações do passado antes que outra operação comece. Essa condição implícita pode ser explicitada através de comentários, e a exclusão mútua é feita pelo compilador.

Ver também editar