Как смоделировать логическое И-вычисление в Promela неатомарно?
Я хочу смоделировать оператор while (flag[j] == true && victim == i)
, где И-оценка должна выполняться неатомарно.
Как это возможно?
Как смоделировать логическое И-вычисление в Promela неатомарно?
Я хочу смоделировать оператор while (flag[j] == true && victim == i)
, где И-оценка должна выполняться неатомарно.
Как это возможно?
loop:
if
:: flag[j] != true -> goto done
:: else
fi;
if
:: victim != i -> goto done
:: else
fi;
/* body of 'while' */
goto loop;
done:
/* after 'while' */
Обратите внимание: хотя передо мной нет среды Spin, что заставляет вас думать, что условное выражение вообще атомарно? Я бы проверил что-то вроде:
byte i = 0
i++ >= 0 && i-- >= 0
never { assert (1 == i) }
Но, в любом случае, первый код выше показывает, как сделать его неатомарным, если это необходимо.