the progress requirement
Imagine the shared bathroom is empty, and someone is waiting outside, but the door system insists on consulting a person who left the building an hour ago before it will let anyone in. The bathroom is free, someone needs it, yet nobody can enter. That is a failure of progress. The progress requirement says: if no thread is currently in the critical section and at least one thread wants to enter, then the decision about who enters next cannot be postponed indefinitely — somebody who wants in must actually get in, and reasonably soon.
Stated more carefully, progress has two parts. First, only the threads that are actively trying to enter (those in their entry sections) may take part in deciding who goes next; a thread that is off doing unrelated work in its remainder section, or that has finished and gone home, must not be able to block the others. Second, that decision cannot be deferred forever. Together these rule out the embarrassing situation where the resource sits idle while threads needlessly wait — which is exactly the bug in a naive strict-alternation lock, where one thread's lack of interest freezes the other.
Progress is a liveness property: it guarantees that something good (forward motion) eventually happens, in contrast to mutual exclusion, which only guarantees that something bad never happens. It is the requirement most often violated by clever-looking homegrown locks. A scheme can have airtight mutual exclusion and still fail progress, leaving the system stuck even though the resource is available. Note that progress is weaker than fairness: it promises the resource will not sit idle with waiters present, but it does not by itself promise that a particular waiter will not be passed over repeatedly — that stronger promise is bounded waiting.
Strict alternation: two threads share turn and each may enter only when turn equals its own id. Thread A enters, leaves, and then loops in its remainder section forever. Now turn is stuck pointing at A, so thread B can never enter even though the critical section is empty. Mutual exclusion holds; progress fails.
If the resource is free and someone wants it, the decision can't be put off forever.
Progress is not the same as fairness. Progress only forbids the resource sitting idle while waiters exist; it still allows one waiter to be perpetually overtaken. Forbidding that needs bounded waiting.