Как мне моделировать логическое И-вычисление в Promela неатомно?

Как мне моделировать логическое И-вычисление в Promela неатомно?

Я хочу смоделировать утверждение while (flag[j] == true && victim == i) где И-оценка должна быть сделана неатомно.

Как это возможно?

1 ответ

Решение
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) } 

Но, так или иначе, первый код выше показывает, как сделать его неатомарным, если это необходимо.

Другие вопросы по тегам