interface iclaim { in bool claim (); in void release (); behavior { bool claimed = false; on claim: {claimed = true; reply (true);} on claim: {claimed = false; reply (false);} [claimed] on release: claimed = false; } } component claim { provides iclaim left; provides iclaim right; behavior { on left.claim (), right.claim (): reply (!left.claimed && !right.claimed); on left.release (), right.release (): {} } } interface iclient { in bool start (); in void stop (); behavior { bool idle = true; [idle] on start: {idle = false; reply (true);} [idle] on start: reply (false); [!idle] on stop: idle = true; } } component user { provides iclient client; requires iclaim resource; behavior { on client.start (): reply (resource.claim ()); on client.stop (): resource.release (); } } component shared_resource { provides iclient left; provides iclient right; system { user user1; user user2; claim resource; left <=> user1.client; right <=> user2.client; resource.left <=> user1.resource; resource.right <=> user2.resource; } }