Вы находитесь на странице: 1из 3

Alumno: Kevin Mike Herrera Vega

Cdigo: 2012-36144

Ao:

Fecha: 13/06/13

2do A

Problema 1 (Algoritmo de Dekker)


Proceso auditor;
x1 := random(100);
x2 := random(100);
cant := random(10);
pizarra1 := true;
Mientras pizarra2 = true hacer
Si turno =2 luego
pizarra1 := false;
Mientras turno = 2 hacer nada;
pizarra1 := true;
Fin_si
Fin_mientras
Si cuenta[x2]>cant luego
cuenta[x1]:= cuenta[x1] + cant;
cuenta[x2]:= cuenta[x2] - cant;
Fin_si
turno := 2;
pizarra1 := false;
Escribir(Se puedo realizar una transaccin de cant soles de la
cuenta x2 a la cuenta x1);
Fin_proceso
Proceso banquero;
total:= 0;
pizarra2 := true;
Mientras pizarra1 = true hacer
Si turno = 1 luego
pizarra2 := false;
Mientras turno = 1 hacer nada;
pizarra2 := true;
Fin_si
Fin_mientras
Para i:=1 hasta ncuentas hacer
total := total + cuenta[i];
Fin_para
turno := 1;
pizarra2 := false;
Escribir(El total de la suma de todas las cuentas es : total)
Fin_proceso
Programa Principal
Inicio
pizarra1:= false;
pizarra2:= false;
turno := 1;
Para i:=1 hasta ncuentas hacer
cuenta[i] := 100;
Fin_para
Iniciar concurrencia
auditor;
banquero;
Fin_concurrencia
Fin.

Problema 2 (Usando Semforos)


Proceso entrada;
inf:= 10;
mat := 10;
max := 12;
Para i:= 1 hasta max hacer
turno := random(1);
Si turno = 1 luego
Si inf > 0 luego
cola[i] := 1;
inf := inf -1;
En caso contrario
cola[i] := 0;
mat := mat -1;
Fin_si
En caso contrario
Si mat > 0 luego
cola[i] := 0;
mat := mat -1;
En caso contrario
cola[i] := 1;
inf := inf -1;
Fin_si
Fin_si
Fin_para
Escribir (La primera cola de estudiantes es : )
Para i:= 1 hasta max hacer
Si cola[i] = 1 luego
Escribir (Informtico)
En caso contrario
Escribir (Matemtico)
Fin_para
foto := true;
Mientras mutex = false hacer
i:= 1;
Mientras (inf>0) o (mat>0) hacer
Si cola[i] = 1 luego
Si inf > 0 luego
cola[i] := 1;
inf := inf -1;
En caso contrario
cola[i] := 0;
mat := mat -1;
Fin_si
En caso contrario
Si mat > 0 luego
cola[i] := 0;
mat := mat -1;
En caso contrario
cola[i] := 1;
inf := inf -1;
Fin_si
Fin_mientras
max := i;
i := i+1;
Fin_mientras

Escribir ('La segunda cola de estudiantes es : ');


Para i:= 1 hasta max hacer
Si cola[i] = 1 luego
Escribir (Informtico)
En caso contrario
Escribir (Matemtico)
Fin_para
foto := true;
Fin_proceso
Proceso fotografa;
Para cont := 1 hasta 2 hacer
Mientras foto = false hacer nada;
Para k := 1 hasta max hacer
colasalida[k]:=cola[k];
Fin_para
max2:= max;
foto := false;
lock:= true;
Fin_para
Fin_proceso
Proceso salida;
Para cont2 =1 hasta 2 hacer
Mientras lock = false hacer nada;
Escribir (Los grupos de alumnos encuestados)
h:=0;
Mientras h<=max2 hacer
Si (max2 - h)>5 luego
Para aux:= h+1 hacer h+5 hacer
Si colasalida[aux] = 1 luego
Escribir (Informtico)
En caso contrario
Escribir (Matemtico)
Fin_para
En caso contrario
Para aux:= h+1 hacer max2 hacer
Si colasalida[aux] = 1 luego
Escribir (Informtico)
En caso contrario
Escribir (Matemtico)
Fin_para
Fin_si
h:= h +5;
Fin_mientras
lock :=false;
mutex := true;
Fin_para
Fin_proceso
Programa Principal
Incio
foto := false;
mutex := false;
lock := false;
Iniciar Concurrencia
entrada;
fotografas;
salida;
Fin_concurrencia
Fin