II. Swap.
void Swap (int *a, int *b) {
int tmp = *a;
*a=*b;
*b=tmp;
}
int lock=0, key;
while (true) {
key=a;
Swap (&lock, &key);
while (key);
CS();
lock=0;
NCS();
}
Активное ожидание — многократная попытка занять ресурс с помощью специальной команды.
Замечания:
1. В чистом виде неэффективно. Решение — вставить вместо (*) (см. выше) следующий кусок кода:
yield();
sleep(0); // Добровольно освободить текущий квант.
2. Существую ситуации, когда активное ожидание эффекитивно, а при использовании сист. вызова ушло бы очень много времени.
3. ВОТ ЗДЕСЬ ШТА