Диаграмма активности UML: форк с защитными условиями на выходах

Я встретил семантическую проблему с условиями охраны и разветвлениями диаграмм действий. Предположим, что завершающее действие A ведет к вилке, а выход вилки ведет к действиям B и C (то есть эта вилка имеет 1 вход и 2 выхода). Если A успешно завершен, и защитное условие B является действительным, в то время как защитное условие C не выполнено, будет ли вся активность продолжаться до действия B и ожидает, пока защитное условие C станет истинным, или ни B, ни C не будут выполнены?

Обновление: рассмотрите следующий пример деятельности

Предположим, что в первый раз, когда A завершается, условие защиты C недействительно, пока B не имеет защиты. Вдоль узла слияния A выполняется во второй раз. После второго завершения A защитное условие C становится вечно действительным, и оно будет выполняться дважды непрерывно из-за первого и второго завершения A. Является ли это правильным?

1 ответ

Решение

Однажды A закончено, появится токен, и вилка будет дублировать его. Один токен идет прямо к B который после завершения перезапускает A до бесконечности. Теперь, что происходит с токеном, путешествующим в C? Они просто стоят в очереди у охранника. Когда через некоторое время охранник открывается, он пропускает один токен (потому что C может держать только один). когда C Закончено, это позволит войти другому токену (если за это время появилось несколько токенов) в зависимости от охраны. В принципе C можно запустить столько раз, сколько A было завершено раньше.

NB. Ваш смысл в вопросе "условия охраны на выходах" неверен. Охранник всегда на входящем потоке управления действия. Вилка не будет контролировать охрану, это действие. И далее действие никогда не может иметь охрану на выходе. Это контролируется поведением действия. Когда он завершается, он появляется в каждом из своих исходящих потоков управления (так называемый неявный ответвление).

Ответ на первоначальный вопрос оставлен как общая информация

На самом деле, когда вы рисуете, ситуация очевидна:

Токен, выходящий справа от верхней вилки, будет заблокирован. B начнется, так как токен прошел охранника. Так как C не запускается, нижняя вилка зависнет, так как для этого нужно 2 токена. Так D не достигается Если только охранник из C когда-нибудь будет разблокирован снаружи.

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