sem grupos[1..4] = 0;
semllego_grupo[1..4] = 0;
sem examenes_listos [1..100] = 0;
notas[1..100] = 0;
sem hay_Examen = 0;
contador_grupo[1..4] = 0;
mutex_grupo[1..4] = 1;
barrera_grupo[1..4] = 0;
cola cola
cola cola2
Process Coordinador(ID: 1..4){
int id_alumno= 0;
Examen examen;
P(llego_grupo[ID]) //espera la barrera de los 25
for i= 1 to 25
push(cola[ID], new examen())
for i= 1 to 25
V(hay_examen[ID]) // avisa que pueden recoger el examen los de ese concurso
for i= 1 to 25
P(termino_examen[ID]) // espera q termine
P(mutex_profes[ID])
id_alumno = pop(cola[ID], id_alumno , examen) ;
V(mutex_profes[ID])
Int nota = corrige_examen(examen)
notas[id_alumno] = nota //pongo la nota
V(examenes_listos[id_alumno])
}
Process NoDocentes(ID:1..100){
mi_grupo= elegir_grupo() //yase cual es mi grupo
P(mutex_grupo[mi_grupo])
contador_grupo[mi_grupo]++
if contador_grupo[mi_grupo] == 25
for i= 1 to 25 do begin
V(barrera_grupo[mi_grupo])
V(llego_grupo[mi_grupo]);
V(mutex_grupo[mi_grupo]);
P(barrera_grupo[mi_grupo]);
//ya pasamos la barrera
P(hay_examen[mi_grupo]);
P(mutex_grupo[mi_grupo])
Examen = pop(cola[mi_grupo])
V(mutex_grupo[mi_grupo])
resuelvo_examen(examen)
P(mutex_grupo[mi_grupo])
push(cola2[mi_grupo], id, examen);
V(mutex_grupo[mi_grupo])
V(termino_examen[mi_grupo]) // Aviso q hay un examen para corregir
P(examenes_listos[ID]);
reviso_mi_nota(notas[ID]);
//me puedo ir
}