There is a one-lane east-west bridge in Hawaii such that when a car is on the bridge going eastbound, no westbound cars are allowed until the eastbound car has left the bridge.
Similarly when a westbound car is on the bridge, no eastbound cars are allowed until the westbound car has left the bridge.
To make matters more complicated, if an eastbound car arrives and sees another eastbound car already on the bridge, then that eastbound car will also proceed onto the bridge.
This is true even if there is a westbound car already waiting to enter the bridge.
Similarly, a westbound car can tailgate behind another westbound car already on the bridge even if an eastbound car was waiting.
Deign a synchronization solution using only locks, semaphores and integer variables that achieves the following:
allows all cars bound in a certain direction to continue crossing as long as there is at least one car still on the bridge that is bound in that direction, then toggles to allow all cars in the opposite direction to proceed in a similar manner. The solution need not be starvation-free.