Синхронизация процесса с использованием теста и настройки - PullRequest
0 голосов
/ 26 сентября 2019

Я пытался понять тест и установить алгоритм для синхронизации процесса, но я немного застрял в последней части, где, если j! = I, мы устанавливаем ожидание [j] = false

Iпрочитайте, что процесс войдет, если ожидает [j] = false, поэтому, если он проходит весь процесс и ожидает [j] = true и key = true снова, то он будет в конечном итоге идти в бесконечном цикле, так как значение блокировки установлено наtrue из первого процесса

Так запускает ли он выполнение кода из условия while, выполняющегося второй раз?

Также, когда мы устанавливаем lock = false, нет ли процесса, входящего как для всех процессов, ожидающих = true, означает ли это, что больше нет процессов, ожидающих входа в критическую секцию?

Как этокод помогите в синхронизации процесса?Другой процесс с ожиданием [i] = false также может одновременно запускаться и выполняться без проблем.

boolean lock;
do
{
waiting[i]=TRUE;
Key=TRUE;
While(waiting[i] && key)
    key=TestAndSet(&lock);
Waiting[i]=FALSE;
//CS
j=(i+1)%n;
While((j!=i)&&!waiting[j])
j=(j+1)%n;
If(j==i)
    lock=FALSE;
Else
    Waiting[j]=FALSE;
//Remainder section
} while(TRUE);
...