<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wx="http://ilps.science.uva.nl/WikiXML/wx" xml:lang="pt" lang="pt">
<head>
<title>Monitor (concorrência)</title>
<meta name="wx_namespace" content="0"/>
<meta name="wx_pagename" content="Monitor_(concorrência)"/>
<meta name="wx_page_id" content="1494802"/>
</head>
<body>
<div id="wx_article">
<wx:section level="1" title="Monitor (concorrência)" id="wxsec1"><h1 class="pagetitle" id="wx1">Monitor (concorrência)</h1>

<p id="wx2">Em <a href="/wpt/Computa%C3%A7%C3%A3o_concorrente" title="Computação concorrente" wx:linktype="known" wx:pagename="Computação_concorrente" wx:page_id="880901" id="wx3">computação concorrente</a>, <b id="wx4">monitor</b> é 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 <a href="/wpt/Mem%C3%B3ria_%28computador%29" title="Memória (computador)" wx:linktype="known" wx:pagename="Memória_(computador)" wx:page_id="67805" id="wx5">memória</a>. Com um modelo de concorrência baseado em monitores, o <a href="/wpt/Compilador" title="Compilador" wx:linktype="known" wx:pagename="Compilador" wx:page_id="2763" id="wx6">compilador</a> ou o <a href="/wpt/Interpretador" title="Interpretador" wx:linktype="known" wx:pagename="Interpretador" wx:page_id="25407" id="wx7">interpretador</a> podem inserir mecanismos de <a href="/wpt/Exclus%C3%A3o_m%C3%BAtua" title="Exclusão mútua" wx:linktype="known" wx:pagename="Exclusão_mútua" wx:page_id="562357" id="wx8">exclusão mútua</a> transparentemente ao invés do programador ter acesso às primitivas para tal, tendo que realizar o bloqueio e desbloqueio de recursos manualmente.</p>

<p id="wx9">Foi inventado por <a href="/wpt/Per_Brinch_Hansen" title="Per Brinch Hansen" wx:linktype="known" wx:pagename="Per_Brinch_Hansen" wx:page_id="1494781" id="wx10">Per Brinch Hansen</a>, originalmente implementado na linguagem <a href="/wpt/Concurrent_Pascal" class="new" title="Concurrent Pascal" wx:linktype="unknown" wx:pagename="Concurrent_Pascal" id="wx11">Concurrent Pascal</a> e usada para estruturar a <a href="/wpt/Comunica%C3%A7%C3%A3o_entre_processos" title="Comunicação entre processos" wx:linktype="known" wx:pagename="Comunicação_entre_processos" wx:page_id="51106" id="wx12">comunicação</a> entre <a href="/wpt/Processo_%28inform%C3%A1tica%29" title="Processo (informática)" wx:linktype="known" wx:pagename="Processo_(informática)" wx:page_id="1745261" id="wx13">processos</a> na linguagem Solo.</p>

<p id="wx14">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 <a href="/wpt/Invariante" title="Invariante" wx:linktype="known" wx:pagename="Invariante" wx:page_id="1506671" id="wx15">invariante</a> que define as premissas para evitar disputa de recursos.</p>

<p id="wx16">O exemplo a seguir demonstra o uso de um monitor para realizar transações de banco:</p>

<pre id="wx17">
Monitor conta_bancária
   Inteiro balanço := 0
   
   Rotina saque( Inteiro quantia )
      Se quantia &lt; 0 Então
         erro "Quantia não pode ser negativa"
      Senão Se balanço &lt; quantia Então
         erro "Saldo insuficiente"
      Senão
         balanço := balanço - quantia
      FimSe
   FimRotina
   
   Rotina depósito( Inteiro quantia )
      Se quantia &lt; 0 Então
         erro "Quantia não pode ser negativa"
      Senão
         balanço := balanço + quantia
      FimSe
   FimRotina
FimMonitor
</pre>

<p id="wx18">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.</p>

<a id="Ver_tamb.C3.A9m" name="Ver_tamb.C3.A9m"/>
<wx:section level="2" title="Ver também" id="wxsec2"><h2 id="wx19"><wx:template id="wx_t1" pagename="Predefinição:Ver_também" page_id="62492"/>Ver também<wx:templateend start="wx_t1"/></h2>

<ul id="wx20">
<li id="wx21"><a href="/wpt/Exclus%C3%A3o_m%C3%BAtua" title="Exclusão mútua" wx:linktype="known" wx:pagename="Exclusão_mútua" wx:page_id="562357" id="wx22">Exclusão mútua</a></li>
</ul>
</wx:section></wx:section></div>
<div id="wx_categorylinks">
<a href="/wpt/index.php?title=Especial:Categories&amp;article=Monitor_%28concorr%C3%AAncia%29" title="Especial:Categories" wx:linktype="known" wx:pagename="Especial:Categories" id="wx23">Categorias de páginas</a>: <span dir="ltr" id="wx24"><a href="/wpt/Categoria:Computa%C3%A7%C3%A3o_concorrente" title="Categoria:Computação concorrente" wx:linktype="known" wx:pagename="Categoria:Computação_concorrente" wx:page_id="880694" id="wx25">Computação concorrente</a></span></div>
<div id="wx_languagelinks">
Outras línguas: <a href="http://cs.wikipedia.org/wiki/Monitor_%28synchronizace%29" class="external" wx:linktype="interwiki" wx:pagename="cs:Monitor_(synchronizace)" id="wx26">Česky</a> | <a href="http://de.wikipedia.org/wiki/Monitor_%28Informatik%29" class="external" wx:linktype="interwiki" wx:pagename="de:Monitor_(Informatik)" id="wx27">Deutsch</a> | <a href="http://en.wikipedia.org/wiki/Monitor_%28synchronization%29" class="external" wx:linktype="interwiki" wx:pagename="en:Monitor_(synchronization)" id="wx28">English</a> | <a href="http://es.wikipedia.org/wiki/Monitor_%28concurrencia%29" class="external" wx:linktype="interwiki" wx:pagename="es:Monitor_(concurrencia)" id="wx29">Español</a> | <a href="http://fr.wikipedia.org/wiki/Moniteur_%28informatique%29" class="external" wx:linktype="interwiki" wx:pagename="fr:Moniteur_(informatique)" id="wx30">Français</a> | <a href="http://it.wikipedia.org/wiki/Monitor_%28sincronizzazione%29" class="external" wx:linktype="interwiki" wx:pagename="it:Monitor_(sincronizzazione)" id="wx31">Italiano</a> | <a href="http://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%8B%E3%82%BF_%28%E5%90%8C%E6%9C%9F%29" class="external" wx:linktype="interwiki" wx:pagename="ja:モニタ_(同期)" id="wx32">日本語</a> | <a href="http://nl.wikipedia.org/wiki/Monitor_%28multiprogrammeren%29" class="external" wx:linktype="interwiki" wx:pagename="nl:Monitor_(multiprogrammeren)" id="wx33">Nederlands</a> | <a href="http://pl.wikipedia.org/wiki/Monitor_%28programowanie_wsp%C3%B3%C5%82bie%C5%BCne%29" class="external" wx:linktype="interwiki" wx:pagename="pl:Monitor_(programowanie_współbieżne)" id="wx34">Polski</a> | <a href="http://zh.wikipedia.org/wiki/%E7%9B%A3%E8%A6%96%E5%99%A8_%28%E7%A8%8B%E5%BA%8F%E5%90%8C%E6%AD%A5%E5%8C%96%29" class="external" wx:linktype="interwiki" wx:pagename="zh:監視器_(程序同步化)" id="wx35">中文</a></div>
</body>
<wx:templatearguments for="wx_t1"><wx:argument name=""/></wx:templatearguments>
</html>
