Use of semaphore and/or mutex for resource sharing Assume a single-lane short and narrow bridge over a river connecting the north and south sides of a small town. The people in their cars need to travel both ways on the bridge. The bridge can become blocked (deadlocked), if the cars from both sides attempt to cross at the same time. Assume that car backup is not possible. Design and implement a deadlock free bridge crossing algorithm using semaphores and/or mutex locks. Programming Hints: • represent northbound and southbound travelers as separate threads, separated by a short random time interval. • once a car is on the bridge, the associated thread will sleep for a random period of time, representing traveling across the bridge. • create a random number of threads representing cars in the interval a-b both ways, each separated by a random time in the interval c-d, • create a random time in the interval e-f representing the time it takes e car to cross the bridge.