Я смотрел на синхронизацию процессов и не мог понять, почему снятие блокировки должно выполняться атомарно, при получении блокировки, очевидно, что она должна выполняться атомарно, поскольку несколько потоков могут одновременно выполнять цикл while и входить вCS в то же время.
доступно инициализируется как True.
acquire() {
while(!available); /* Busy wait */
available = false;
}
//critical section
release() {
available = true;
}