Multithreaded blocks/loops go a long way.
But they cannot express all concurrency patterns.
Many synchronization constructs are known: locks, semaphores, monitors, etc.
But these do not preserve the (deterministic) sequential interpretation of the program.
We introduce flags and counters.
Flags and counters can be used so that:multithreaded ? sequential.