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. ВОТ ЗДЕСЬ ШТА