Ejercicio 5

Ejercicio 5

de Nicolas Grosso San Roman -
Número de respuestas: 1

Hola! Planteé lo siguiente pero me estoy encontrando con que no funciona correctamente. 

Para empezar, quería darle prioridad al capataz poniendo un semáforo binario "capataz" inicializado en 1, pero viendo lo que escribí llego a que si hay algún obrero tomando ladrillos el capataz no puede entrar al pallet, lo cual no sé si eso está bien (si un obrero o la grua esta ejecutandose, ¿el capataz debe cortar con eso y ejecutar él?). Creo que con lo que escribí ninguno tiene prioridad sobre ninguno.

También veo que si un obrero detecta que no hay ladrillos suficientes, despierta a la grúa (semáforo binario inicializado en 0) , pero la grúa no va a poder efectuar el cambio de pallet pues estaría trancada en P(capataz).

Por último, si capataz es binario, los obreros pueden tomar ladrillos de a uno por vez, y no los cuatro en simultáneo. Esto es correcto? 

Agradezco si me aclaran cómo mejorar el código!


En respuesta a Nicolas Grosso San Roman

Re: Ejercicio 5

de Jorge Merlino -

Para el capataz sería mejor que tuvieras una variable global que indique si el capataz está esperando en lugar de tratar de resolver todo con un semáforo. Vas a tener que mutuexcluir el acceso a esa variable global lógicamente.

La grúa en principio funcionaría porque hacés V(capataz) luego de hacer V(grua) pero la grúa hace muchos P(capataz) sin hacer nunca V.

También te faltaría otro semáforo (posiblemente inicializado en 0) para bloquear a los obreros cuando se acaban los ladrillos. Es similar a lo que hacés con la grúa.

Mirá si esto te ayuda y si no consultá en el práctico.

Saludos