But...
Nondeterminism
Each process follows this template:
while (1)
{...other stuff...
enter_region( );
critical section
exit_region( );
}
The problem is to define enter_region and exit_region to ensure mutual exclusion with some degree of fairness.
Synchronization primitives (abstractions, such as locks) which are provided by a system may be implemented with some combination of these techniques
.