Explain why Windows, Linux, and Solaris implement multiple locking mechanisms. Describe the circumstances under which they use spin locks,mutex locks, semaphores, adaptive mutex locks, and condition variables. In each case, explain why the mechanism is needed.