Ejercicio 10

Ejercicio 10

de Thiago Caetano Acuña Vinoles -
Número de respuestas: 1

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

En respuesta a Thiago Caetano Acuña Vinoles

Re: Ejercicio 10

de Santiago Freire Lopez -
Hola Thiago,

Como lo que ejecuta en el cobegin-coend no tiene un orden definido, tu código puede repetir acciones (ej: llenar y tapar dos veces seguidas o avanzar la cinta dos veces seguidas), que no es el comportamiento esperado.

Saludos,
Santiago.