1. Describe how the busy-wait implementation of a semaphore can cause starvation.
2. In addition to deadlock and starvation, concurrent processes can experience livelock, where no process is blocked, all processes get to execute, but each continually repeats the same code without possibility of success. Write a simple program in (a) Java or (b) Ada that is an example of livelock.