Buenas Esteban,
Creo que necesitas mutuo excluir cuando consultas en los ifs por cant_barcos y cant_autos en barco, imagina que la operacion ++ se haga en tres instrucciones de bajo nivel como en el ejemplo del teórico. Por ejemplo, llega un auto y un barco en ese orden, justo cuando el auto llega a cant_autos++ pierde la Cpu y la toma barco que pregunta en el if y ve que cant_autos=0. Si el puente no estaba elevado, sera elevado con el auto pasando. En caso contrario el auto choca contra el puente.
Saludos,
Agustin Sanchez.