Buenas, ví la solución de OpenFing y la entendí. Sin embargo, yo había planteado otra y quiero saber si está bien.
Entiendo que puede llegar a no ser óptima por el tema de que consulta si puede llenar o tapar (y tranca las otras ejecuciones) incluso cuando no es necesario. Pero más allá de eso, ¿es correcta?
program main
INIT(MUTEX, 1);
procedure llenar
if (puedo_llenar())
llenar_botella();
end procedure
procedure tapar
if (puedo_tapar())
pongo_tapa();
end procedure
procedure procedimiento
begin
P(MUTEX);
cobegin
llenar();
tapar();
end
V(MUTEX);
end procedure
begin
while (true)
cobegin
procedimiento;
begin
P(MUTEX);
avanzo_cinta();
V(MUTEX);
end
end while
end
end program