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