interface IBlocked { in void e(); behaviour { on e:{} } } interface IAsync { in void trigger(); out void notify(); behaviour { bool pending = false; on trigger: { [!pending] pending = true; [pending] illegal; } on inevitable: { [pending]{pending = false; notify;} } } } component Blocked { provides IBlocked provided; requires IAsync required; behaviour { blocking on provided.e(): required.trigger(); on required.notify(): provided.reply(); } } component BlockedSystem2 { provides IBlocked port1; provides IBlocked port2; requires IAsync async1; requires IAsync async2; system { Blocked blocked1; Blocked blocked2; blocked1.provided <=> port1; blocked2.provided <=> port2; blocked1.required <=> async1; blocked2.required <=> async2; } }