С учетом реализации блокировки в книге Операционные системы: три простых пьесы (http://pages.cs.wisc.edu/~remzi/OSTEP/threads-locks.pdf) на стр. 8, где блокировка получается с помощью атомарной операции, выполняемой Test and Set (& lock-> flag, 1) (реализация приведено на странице 6), вместо того, что пойдет не так, если я реализую блокировку с помощью этой функции
void lock(lock_t *lock)
{
while(1)
{
while(lock->flag==1)
;
if(test_and_set(&lock->flag,1)==0)
return;
}
}