Monitor (concorrência)
Este artigo não cita fontes confiáveis. (Março de 2019) |
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.