22.11.2014 Views

Tema 3: MONITORES - Departamento de Lenguajes y Sistemas ...

Tema 3: MONITORES - Departamento de Lenguajes y Sistemas ...

Tema 3: MONITORES - Departamento de Lenguajes y Sistemas ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

2. Sincronización en Monitores<br />

2.4.3. Implementación con semáforos <strong>de</strong>l productor/consumidor<br />

• Propuesta <strong>de</strong> Brinch Hansen(/*signal es la última instrucción*/<br />

program productorconsumidor;<br />

CONST tamaño=...;<br />

VAR b: array [0..tamaño-1] of integer; in, out, n: integer;<br />

s: semaphore; /para E.M.*/<br />

semnovacio, semnolleno: semaphore; /* binarios */<br />

contnovacio, contnolleno: integer;<br />

procedure añadir (v:integer);<br />

{ P(s); if (n==tamaño) { contnovacio+ +; V(s); P(semnovacio); contnovacio --}<br />

b[in] = v; in := (in + 1) % tamaño; n + +;<br />

if contnolleno>0 V(semnolleno) else V(s);}<br />

procedure tomar(var v:integer);<br />

{ P(s); if (n==0) {contnolleno + +; V(s); P(semnolleno); contnolleno - -}<br />

v := b[out]; out := (out + 1) % tamaño; n := -- ;<br />

if contnovacio>0 V(semnovacio) else V(s); }

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!