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