Pr♦❣r❛♠s✱ ❙❡♠❛♥t✐❝s ❛♥❞ ❊✛❡❝t✐✈❡ ❆t♦♠✐❝✐t② ❙❤❛♥❦❛r ❆♣r✐❧ ✸✱ ✷✵✶✹
❖✉t❧✐♥❡ ♣r♦❣r❛♠s Pr♦❣r❛♠ ❙❡r✈✐❝❡ Pr♦❣r❛♠s ❙t❛t❡ tr❛♥s✐t✐♦♥ s❡♠❛♥t✐❝s ♦❢ s②st❡♠s ❆ss❡rt✐♦♥s ❛♥❞ t❤❡✐r ❡✈❛❧✉❛t✐♦♥ ❙♣❧✐tt✐♥❣ ❛♥❞ st✐t❝❤✐♥❣ ♦❢ ❡✈♦❧✉t✐♦♥s ❆✉①✐❧✐❛r② ✈❛r✐❛❜❧❡s ❊✛❡❝t✐✈❡ ❛t♦♠✐❝✐t② ❈♦♠♠✉t❛t✐✈✐t② Pr♦♦❢ r✉❧❡s
Pr♦❣r❛♠ str✉❝t✉r❡ ♣r♦❣r❛♠s ❘❡❛❞✲♦♥❧② ✈❛r✐❛❜❧❡s program name ( params ) ia { pred } mysid: ✏t❤✐s✑ s✐❞ main mytid: ✏t❤✐s✑ t✐❞ functions P❛r❛♠❡t❡rs r❡❛❞✲♦♥❧② input functions atomicity assumption {...} progress assumption {...} // ✐♥♣✉t ❢✉♥❝t✐♦♥ input rtype mysid. name ( params ) ia { pred } body rval ← sid.fname ( params ); // ❝❛❧❧ t♦ ❡♥✈✐r♦♥♠❡♥t ia { pred }
❙②st❡♠s ❛♥❞ ❚❤r❡❛❞s ♣r♦❣r❛♠s startSystem ( P ( params )) ✐♥st❛♥t✐❛t❡s ♣r♦❣r❛♠ P ❜❛s✐❝ s②st❡♠ ✐s ❝r❡❛t❡❞ ✇✐t❤ ❛ ✉♥✐q✉❡ s②st❡♠ ✐❞ ✭s✐❞✮ ✐♥st❛♥t✐❛t✐♥❣ t❤r❡❛❞ ❡①❡❝✉t❡s ♠❛✐♥ ❛♥❞ r❡t✉r♥s s②st❡♠ r❡♠❛✐♥s ❆❣❣r❡❣❛t❡ s②st❡♠ x ✿ ❜❛s✐❝ s②st❡♠ x ❛♥❞ ✐ts ❞❡s❝❡♥❞❡❞ s②st❡♠s ❈♦♠♣♦s✐t❡ s②st❡♠✿ ❛r❜✐tr❛r② ❝♦❧❧❡❝t✐♦♥ ♦❢ s②st❡♠s startThread( F ( params )) ❝r❡❛t❡s t❤r❡❛❞ ❡①❡❝✉t✐♥❣ ❧♦❝❛❧ ♥♦♥✲✐♥♣✉t ❢✉♥❝t✐♦♥ F r❡t✉r♥s ❛ ✉♥✐q✉❡ t❤r❡❛❞ ✐❞ ✭❛❜❜r t✐❞✮ t❤r❡❛❞ ❡♥❞s ✇❤❡♥ ✐t r❡❛❝❤❡s ❡♥❞ ♦❢ F
❙②st❡♠ t❡r♠✐♥❛t✐♦♥ ♣r♦❣r❛♠s P❧❛t❢♦r♠ ❡✈❡♥t✉❛❧❧② t❡r♠✐♥❛t❡s ❛ s②st❡♠ ✐❢ ❛ t❤r❡❛❞ ✐♥ s②st❡♠ ❤❛s ❡①❡❝✉t❡❞ endSystem() s②st❡♠ ✐s ❝♦♥t✐♥✉♦✉s❧② ✐♥ ❛ ❡♥❞❛❜❧❡ st❛t❡ ❙②st❡♠ ✐s ❡♥❞❛❜❧❡ ♥♦ ❣✉❡st t❤r❡❛❞s ✐♥ t❤❡ s②st❡♠ ♥♦ ❧♦❝❛❧ t❤r❡❛❞ ♦❢ t❤❡ s②st❡♠ ✐s ✐♥ ❛♥♦t❤❡r s②st❡♠ ❊♥s✉r❡s t❤❛t ❛ t❤r❡❛❞ ✐s ♥♦t ❧❡❢t ✐♥ ❧✐♠❜♦✳ ❆t t❡r♠✐♥❛t✐♦♥✱ ♣❧❛t❢♦r♠ t❡r♠✐♥❛t❡s ❛❧❧ ❧♦❝❛❧ t❤r❡❛❞s ❝❧❡❛♥s ✉♣ s②st❡♠✬s st❛t❡
❖✉t❧✐♥❡ s❡r✈✐❝❡ ♣r♦❣r❛♠s Pr♦❣r❛♠ ❙❡r✈✐❝❡ Pr♦❣r❛♠s ❙t❛t❡ tr❛♥s✐t✐♦♥ s❡♠❛♥t✐❝s ♦❢ s②st❡♠s ❆ss❡rt✐♦♥s ❛♥❞ t❤❡✐r ❡✈❛❧✉❛t✐♦♥ ❙♣❧✐tt✐♥❣ ❛♥❞ st✐t❝❤✐♥❣ ♦❢ ❡✈♦❧✉t✐♦♥s ❆✉①✐❧✐❛r② ✈❛r✐❛❜❧❡s ❊✛❡❝t✐✈❡ ❛t♦♠✐❝✐t② ❈♦♠♠✉t❛t✐✈✐t② Pr♦♦❢ r✉❧❡s
❙❡r✈✐❝❡ ♣r♦❣r❛♠ str✉❝t✉r❡ s❡r✈✐❝❡ ♣r♦❣r❛♠s ❆ s❡r✈✐❝❡ ♣r♦❣r❛♠ ✐s ❡ss❡♥t✐❛❧❧② ❛ st❛t❡ ♠❛❝❤✐♥❡ ♦r❣❛♥✐③❡❞ ✐♥t♦ ✏✐♥♣✉t✑ ❛♥❞ ✏♦✉t♣✉t✑ ❢✉♥❝t✐♦♥s service prog name ( params ) { ic {predicate in params } <main> // define and initialize variables <input functions> <output functions> <atomicity and progress assumptions> } ❉♦❡s ♥♦t ❝r❡❛t❡ ❛♥② ♦t❤❡r s②st❡♠ s♦ ♦♥❧② ♦♥❡ ❜❛s✐❝ s②st❡♠✱ ❡✈❡♥ ❢♦r ❛ ❞✐str✐❜✉t❡❞ s❡r✈✐❝❡ ❈r❡❛t❡s t❤r❡❛❞s ♦♥❧② t♦ ❡①❡❝✉t❡ ♦✉t♣✉t ❢✉♥❝t✐♦♥s ✭✐❢ ❛♥②✮ ▼❛①✐♠❛❧ ❛t♦♠✐❝✐t②✿ ❡✈❡r② ❛t♦♠✐❝ st❡♣ ❞♦❡s ✐♥♣✉t ♦r ♦✉t♣✉t
■♥♣✉t ❢✉♥❝t✐♦♥ s❡r✈✐❝❡ ♣r♦❣r❛♠s ❈♦♥s✐sts ♦❢ ✐♥♣✉t ♣❛rt✿ ❡①❡❝✉t❡❞ ❛t♦♠✐❝❛❧❧② ✇❤❡♥ ❢✉♥❝t✐♦♥ ✐s ❝❛❧❧❡❞ ♦✉t♣✉t ♣❛rt✿ ❡①❡❝✉t❡❞ ❛t♦♠✐❝❛❧❧② ✇❤❡♥ ❢✉♥❝t✐♦♥ r❡t✉r♥s ■♥♣✉t ♣❛rt ❝♦♥s✐sts ♦❢ ✐♥♣✉t ❝♦♥❞✐t✐♦♥✿ ♣r❡❞✐❝❛t❡ ✐♥ ✈❛rs ❛♥❞ ♣❛r❛♠s✱ ♥♦ s✐❞❡✲❡✛❡❝t ❜♦❞②✿ ♥♦♥✲❜❧♦❝❦✐♥❣ ❞❡t❡r♠✐♥✐st✐❝ ✉♣❞❛t❡ t♦ ♠❛✐♥✬s ✈❛rs ❇♦❞② ✐s ❡①❡❝✉t❡❞ ✐❢ ✐♥♣✉t ❝♦♥❞✐t✐♦♥ ❤♦❧❞s✱ ♦✴✇ ❢❛✉❧t ❖✉t♣✉t ♣❛rt ❝♦♥s✐sts ♦❢ ♦✉t♣✉t ❝♦♥❞✐t✐♦♥ ❛♥❞ ❜♦❞②✱ ❛s ✐♥ ✐♥♣✉t ♣❛rt ❇♦❞② ✐s ❡①❡❝✉t❡❞ ♦♥❧② ✐❢ ♦✉t♣✉t ❝♦♥❞✐t✐♦♥ ❤♦❧❞s✱ ♦✴✇ ❜❧♦❝❦ ◆♦t❡✿ ✐♥♣✉t ❢✉♥❝t✐♦♥ ♥❡✈❡r ❝❛❧❧s t❤❡ ❡♥✈✐r♦♥♠❡♥t
■♥♣✉t ❢✉♥❝t✐♦♥✿ ❣❡♥❡r❛❧ ❝❛s❡ s❡r✈✐❝❡ ♣r♦❣r❛♠s input retType sid . fname ( param ) ✐♥♣✉t ♣❛rt ic { predicate } body output( extParam , internalParam ) ♦✉t♣✉t ♣❛rt oc { pred } body return rval ; output(.) ✿ ✐♥tr♦❞✉❝❡s ❛❞❞✐t✐♦♥❛❧ ♣❛r❛♠❡t❡rs ❢♦r ♦✉t♣✉t ♣❛rt extParam ✿ r❡t✉r♥ ✈❛❧✉❡❀ ❛❧❧♦✇s ❡①t❡r♥❛❧ ♥♦♥❞❡t❡r♠✐♥✐s♠ internalParam ✿ ❛❧❧♦✇s ✐♥t❡r♥❛❧ ♥♦♥❞❡t❡r♠✐♥✐s♠ ♣❛r❛♠❡t❡rs ❝❛♥ ❤❛✈❡ ❛♥② ✈❛❧✉❡ ❛❧❧♦✇❡❞ ❜② ♦❝✬s pred ♣❛r❛♠❡t❡rs ♥♦t ✉♣❞❛t❡❞ ✐♥ ♦✉t♣✉t ❜♦❞②
❖✉t♣✉t ❢✉♥❝t✐♦♥ s❡r✈✐❝❡ ♣r♦❣r❛♠s ❖✉t♣✉t ❢✉♥❝t✐♦♥✿ ✏r❡✈❡rs❡✑ ♦❢ ❛♥ ✐♥♣✉t ❢✉♥❝t✐♦♥ ♦✉t♣✉t ♣❛rt ❢♦❧❧♦✇❡❞ ❜② ✐♥♣✉t ♣❛rt ❖✉t♣✉t ♣❛rt✿ ♦✉t♣✉t ❝♦♥❞✐t✐♦♥ ❛♥❞ ❜♦❞② ❜♦❞② ❡♥❞s ✐♥ ❝❛❧❧ t♦ ❡♥✈✐r♦♥♠❡♥t✱ s❛② sid.fn ( param ) ❛t♦♠✐❝❛❧❧② ❝r❡❛t❡ t❤r❡❛❞ ❛♥❞ ❡①❡❝✉t❡ ❜♦❞② ✭✐♥❝❧✉❞✐♥❣ ❝❛❧❧✮ ♦♥❧② ✐❢ ♦✉t♣✉t ❝♦♥❞✐t✐♦♥ ❤♦❧❞s✱ ♦✴✇ ❜❧♦❝❦ ■♥♣✉t ♣❛rt✿ ✐♥♣✉t ❝♦♥❞✐t✐♦♥ ❛♥❞ ❜♦❞② ❜♦❞② st❛rts ✇✐t❤ t❤❡ ❝❛❧❧✬s r❡t✉r♥ ✈❛❧✉❡ ✭✐❢ ❛♥②✮ ✉♣♦♥ r❡t✉r♥✱ ❛t♦♠✐❝❛❧❧② ❡①❡❝✉t❡ ❜♦❞② ❛♥❞ t❡r♠✐♥❛t❡ t❤r❡❛❞ ✐❢ ✐♥♣✉t ❝♦♥❞✐t✐♦♥ ❤♦❧❞s✱ ♦✴✇ ❢❛✉❧t ◆❡✈❡r ❝❛❧❧❡❞ ❜② ❡♥✈✐r♦♥♠❡♥t✳ Pr♦❣r❛♠ ❤❛s ♥♦ ♦t❤❡r ❝❛❧❧ t♦ sid.fn (.) s♦ ❛❧❧ ✐ts sid.fn (.) ❝❛❧❧s ❛r❡ ❝❛♣✉t❡❞ ❜② t❤❡ ♦✉t♣✉t ❝♦♥❞✐t✐♦♥
❖✉t♣✉t ❢✉♥❝t✐♦♥✿ ❣❡♥❡r❛❧ ❝❛s❡ s❡r✈✐❝❡ ♣r♦❣r❛♠s output fname ( extParam, intParam ) { oc { oc predicate } ♦✉t♣✉t ♣❛rt✱ output body ❡♥❞s ❛t sid.fn(.) rval ← sid.fn ( args ); ✐♥♣✉t ♣❛rt✱ ic { ic predicate } ❜❡❣✐♥s ❛t rval input body } extParam ✿ sid ❛♥❞ args ♦❢ t❤❡ ❝❛❧❧ intParam ✿ ✐♥t❡r♥❛❧ ♣❛r❛♠❡t❡rs✱ ❛❧❧♦✇s ✐♥t❡r♥❛❧ ♥♦♥❞❡t❡r♠✐♥✐s♠
❆t♦♠✐❝✐t② ❛♥❞ ♣r♦❣r❡ss ❛ss✉♠♣t✐♦♥s s❡r✈✐❝❡ ♣r♦❣r❛♠s ❆t♦♠✐❝✐t② ❛ss✉♠♣t✐♦♥ ♠❛✐♥✱ ✐♥♣✉t ♣❛rts✱ ♦✉t♣✉t ♣❛rts Pr♦❣r❡ss ❛ss✉♠♣t✐♦♥ ♣r❡❞✐❝❛t❡ ✇✐t❤ t❡r♠s r❡♣❧❛❝❡❞ ❜② ❧❡❛❞s✲t♦ ❛ss❡rt✐♦♥s✱ ❡✳❣✳ P ⇒ Q − → ✭ A ❧❡❛❞s✲t♦ B ✮ ⇒ ✭ C ❧❡❛❞s✲t♦ D ✮ − → forsome(j: P ) forsome(j: ( A ❧❡❛❞s✲t♦ B ) ) ✏t❤r❡❛❞✲❧♦❝❛t✐♦♥✑ ❡①♣r❡ss✐♦♥s ❛r❡ r❡str✐❝t❡❞ t♦ ✏ thread t in s.f ✑ ❛♥❞ ✐ts ♥❡❣❛t✐♦♥ ✇❤❡r❡ s.f ✐s ❛♥ ✐♥♣✉t ❢✉♥❝t✐♦♥ ♦r ♦✉t♣✉t ❝❛❧❧ ♦❢ t❤❡ s❡r✈✐❝❡ ❧♦❝❛❧❧② r❡❛❧✐③❛❜❧❡✿ ✇✴♦ r❡q✉✐r✐♥❣ ✐♥♣✉ts ❢r♦♠ ❡♥✈✐r♦♥♠❡♥t
Recommend
More recommend