Похоже, что выше была затронута проблема синхронизации в workflow.
Модель workflow основана на перемещении маркера. И иногда нужно явно указывать когда результат одной операции должен «уничтожать» маркер в другой операции (function, activity, etc).
Один из подходов, это:
Ответ на этот вопрос: остановка всего действия и всех операторов это остановка процесса икона Конец.
Но только конечно не всего процесса, а в варианте, когда мы такой блок выносим в отдельный подпроцесс и покидание маркера через «конец подпроцесса» (икона Конец) - уничтожает все маркеры этого экземпляра подпроцесса (части нашего процесса).
Вариант, если обойтись без такой декомпозиции – это вводить специальный «анти-маркер» (принудительное завершение операции по внешнему сигналу, поглощение маркера антимаркером), как показано в сети WF2M (по сути математизация ЕРС).
Вообще, проблема синхронизации процессов (операций в процессах) в существующих формализмах workflow – не полностью решается через операторы and\or\xor. Нужен дополнительные с иной логикой обработки маркера.
Это все вопросы к математизации workflow, которой нет ни у Дракона, ни BPMN. Она есть в сетях Петри, CСS, но они «не очень workflow».
SergiiKol
21 час назад
Привет Че
Круто, что ты копнул в тему синхронизации в workflow — это реально интересно. Давай сделаем так: скинь схему процесса, который вызывает у тебя сомнения (из WF2M, Петри или твоего примера), и поясни, где именно проблема с движением маркера/синхронизацией. Я постараюсь разобрать по шагам на твоём случае — как ДРАКОН справляется (или нет) с подобным.
Кратко про ДРАКОН: Ты прав, строгой "математизации" как в Петри (токены, формулы позиций) в нём нет — фокус на эргономике и визуальной структуре для минимизации ошибок. Но инструменты синхронизации есть: "Синхронизатор" (ждёт события/времени для потоков), "Ждать" (пауза до условия, как "анти-маркер" — "убивает" маркер по сигналу), "Разделение/Слияние" для параллелизма (маркеры раздваиваются, сливаются после завершения всех/по условию). "Исчисление икон" даёт базовую математику — верификация схем (нет "висячих хвостов"/несинхронизированных циклов), формулы маршрутов (типа "A да B нет C"). В реальных проектах (типа "Буран") это работает для сложных workflow без хаоса.
itGuevara
20 часов назад
поясни, где именно проблема с движением маркера/синхронизацией.
Так в статье и есть пример, см. 3.2 Вариант 4 (антимаркер)
Добавил к статье PS1. Кроме того в комментариях вспоминали Дракона.
SergiiKol
19 часов назад
Привет! Спасибо за такой подробный пример — это реально помогает сразу вникнуть в суть задачи. Я попробовал спроектировать твой вариант 4 (антимаркер из WF2M) на ДРАКОНе: получились две параллельные ветки, где каждый учёный, прежде чем бросать монету, проверяет готовность машины, а потом (если оба попытались почти одновременно) выясняется, кто был первый. Первый переходит в busy, второй — без всяких сложных «антимаркеров» или cancel-дуг просто уходит обратно в ожидание. По сути, вся конфликтная ситуация тут предотвращается заранее за счёт простого ветвления и явных проверок.
Похоже, схема довольно прозрачно разруливает потенциальный конфликт: никто не «зависает» посередине, все переходы видны и остаются под контролем.
Схема Дракон
Правильно ли я понял исходную логику задачи? Или, может, я где-то что-то упростил и не уловил всю глубину вопроса? Если так — буду рад, если подскажешь детали или укажешь, на какой момент ещё стоит обратить внимание!

itGuevara
13 часов назад
Нет, не верно.
Это уже иной алгоритм (другая модель поведения ученого). В моем - поведение ученого более примитивное, точнее "задумчивое".
Мой вариант – это пример, когда мы управляем состоянием (выполняемая операция, т.е. где уже находится маркер) с помощью внешнего воздействия, т.е. на вход этой же операции (уже запущенной и выполняемой) подаем что-то (сигнал), что может отменить дальнейшее ее выполнение («выбить маркер»). В этом и суть анти-маркера. Это новый сигнал, изменяющий состояние на «пусто» путем действия «отмена операции».
Другой вариант логики: это когда в зависимости от прохождения маркера в одной ветке, маркер из соседней уничтожается. Это Шаблон 28 (Блокирующий дискриминатор). Анимация шаблона WCP28 Blocking Discriminator.
Обратите внимание в указанных там продуктах он (Шаблон 28) либо не поддерживается или заявлен, но не понятно, как поддерживается (BPMN). И его также нет и в Драконе.
Да, и в табличке продуктов нет Дракона. Напишите Вил ван дер Аалсту, чтобы добавил туда Дракона.
SergiiKol
16 минут назад
Хочу уточнить правильно ли я понял
Задача заблокировать маркер выполнения паралельного процесса "Учёный 1 или 2"
в моменте когда монеты брошены и одна из них попала в приёмник.
Всё верно в этом моменте происходит блокировка, отбитие броска?