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