Critical section: A section of code within a process that requires access to shared resources and that may not be executed while another process is in a corresponding section of code.
Deadlock: A situation in which two or more processes are unable to proceed because each is waiting for one of the others to do something.
Livelock: A situation in which two or more processes continuously change their state in response to changes in the other process(es) without doing any useful work.
Mutual Exclusion: The requirement that when one process is in a critical section that accesses shared resources, no other process may be in a critical section that accesses any of those shared resources.
Race Condition: A situation in which multiple threads or processes read and write a shared data item and the final result depends on the relative timing of their execution.
Starvation: A situation in which a runnable process is overlooked indefinitely by the scheduler; although it is able to proceed, it is never chosen.
Discuss an example for each of the concurrency key terms