Escuela Técnica Superior de Ingeniería Informática Departamento de Ciencias de la Computación
Salvador Sánchez - Problemas de Programación avanzada Página 1 de 4
Ejercicios resueltos de programación concurrente con semáforos
1. Resolver mediante un programa en pseudo-Pascal que utilice un semáforo binario el problema del productor-consumidor en una cola.
program Ejercicio1;
procedure Productor(var c:cola); var x: integer; begin repeat (*... producir el dato x ... *) wait(s); Meter(c,x); (* sección crítica *) signal(s);
until false; end;
procedure Consumidor(var c:cola); var y: integer; begin repeat wait(s); Sacar(c,y); (* sección crítica *) signal(s); (*... consumir el dato y ... *) until false; end;
begin (* Programa principal *) Inicializar(c); init(s,1); cobegin Productor(c); Consumidor(c); coend; end.
Escuela Técnica Superior de Ingeniería Informática Departamento de Ciencias de la Computación
Salvador Sánchez - Problemas de Programación avanzada Página 2 de 4
2. Implementar el siguiente diagrama de precedencia mediante un programa en pseudo-Pascal que utilice semáforos:
program Ejercicio2; var s: semaphore;
procedure p1; begin c; wait(s); f; end;
procedure p2; begin b; d; signal(s); e; end;
begin (* Programa principal *) init (s,0); a; cobegin p1; p2; coend; g; h; end.
Escuela Técnica Superior de Ingeniería Informática Departamento de Ciencias de la Computación
Salvador Sánchez - Problemas de Programación avanzada Página 3 de 4
3. Implementar el siguiente diagrama de precedencia mediante un programa en
pseudo-Pascal que utilice semáforos:
program Ejercicio3; var s1,s2: semaphore;
procedure p1; begin e;
signal(s1); f; end;
procedure p2; begin c; signal(s2); wait(s1); d; end;
procedure p3; begin h; wait(s2); i; end;
begin (* Programa principal *) init (s1,0); init (s2,0); a; cobegin p1; p2; p3; coend; g; end.
Escuela Técnica Superior de Ingeniería Informática Departamento de Ciencias de la Computación
Salvador Sánchez - Problemas de Programación avanzada Página 4 de 4
4. Implementar mediante un programa en pseudo-Pascal que utilice semáforos el
diagrama siguiente:
Solución propuesta:
program Ejercicio4; var s: semaphore;
procedure p1; begin cobegin p11; p12; coend; g; end;
procedure p2; begin wait(s);
f; end;
procedure p11; begin d; signal(s); e; end;
procedure p12; begin b; c; end;
begin (* Programa principal *) init (s,0); a; cobegin p1; p2; coend; h; i; end.
This document was created with Win2PDF available at http://www.daneprairie.com.The unregistered version of Win2PDF is for evaluation or non-commercial use only.
Recommended