tr Prr r - - PowerPoint PPT Presentation

t r pr r
SMART_READER_LITE
LIVE PREVIEW

tr Prr r - - PowerPoint PPT Presentation

tr Prr r rr ttr rrs t trs


slide-1
SLIDE 1

❖♥ ▼✉❧t✐✲❚❤r❡❛❞❡❞ Pr♦❣r❛♠♠✐♥❣

❙❤❛♥❦❛r ❋❡❜r✉❛r② ✶✽✱ ✷✵✶✽

slide-2
SLIDE 2

▼✉❧t✐✲t❤r❡❛❞❡❞ ♣r♦❣r❛♠s

▼✉❧t✐♣❧❡ t❤r❡❛❞s ❡①❡❝✉t✐♥❣ ❝♦♥❝✉rr❡♥t❧② ✐♥ t❤❡ s❛♠❡ ❛❞❞r❡ss s♣❛❝❡ ❚❤r❡❛❞s ✐♥t❡r❛❝t ❜② r❡❛❞✐♥❣ ❛♥❞ ✇r✐t✐♥❣ s❤❛r❡❞ ♠❡♠♦r② ❡❣✿ t❤r❡❛❞s u ❛♥❞ v r❡❛❞✴✇r✐t❡ ❛ str✉❝t✉r❡ ✭♠❡♠♦r② ❛r❡❛✮ x ❘❡q✉✐r❡s s②♥❝❤r♦♥✐③❛t✐♦♥ ♦❢ t❤r❡❛❞s u s❤♦✉❧❞ ✇❛✐t t♦ ❛❝❝❡ss x ✇❤✐❧❡ v ✐s ✇r✐t✐♥❣ x u s❤♦✉❧❞ ✇❛✐t t♦ ✏❛❞❞✑ t♦ x ✇❤✐❧❡ x ✐s ✏❢✉❧❧✑ ❈❛♥♦♥✐❝❛❧ s②♥❝❤r♦♥✐③❛t✐♦♥ ♣r♦❜❧❡♠s ♠✉t✉❛❧✲❡①❝❧✉s✐♦♥✱ r❡❛❞❡rs✲✇r✐t❡rs✱ ♣r♦❞✉❝❡r✲❝♦♥s✉♠❡r✱ ✳✳✳ ❙t❛♥❞❛r❞ s②♥❝❤r♦♥✐③❛t✐♦♥ ❝♦♥str✉❝ts ❧♦❝❦s✱ ❝♦♥❞✐t✐♦♥s✱ s❡♠❛♣❤♦r❡s✱ ✳✳✳

  • ♦❛❧✿ s♦❧✈❡ s②♥❝❤r♦ ♣r♦❜❧❡♠s ✉s✐♥❣ st❛♥❞❛r❞ s②♥❝❤r♦ ❝♦♥str✉❝ts
slide-3
SLIDE 3

❖✉t❧✐♥❡

❧♦❝❦✱ ❝✈✱ s❡♠

▲♦❝❦s✱ ❝♦♥❞✐t✐♦♥ ✈❛r✐❛❜❧❡s✱ s❡♠❛♣❤♦r❡s ❆✇❛✐t✲str✉❝t✉r❡❞ ♣r♦❣r❛♠ ❆❝❤✐❡✈✐♥❣ ♣r✐♦r✐t② ❢♦r ✇❛✐t✐♥❣ t❤r❡❛❞s ❇♦✉♥❞❡❞ ❇✉✛❡r ❘❡❛❞❡rs✲❲r✐t❡rs ❘❡❛❞✲✇r✐t❡ ▲♦❝❦s

slide-4
SLIDE 4

▲♦❝❦s

❧♦❝❦✱ ❝✈✱ s❡♠

▲♦❝❦ ♦♣❡r❛t✐♦♥s✿ ❛❝q✉✐r❡ ❛♥❞ r❡❧❡❛s❡ ❧❝❦ ← ▲♦❝❦✭✮ / / ❞❡✜♥❡ ❛ ❧♦❝❦ ❧❝❦✳❛❝q✭✮ / / ❛❝q✉✐r❡ t❤❡ ❧♦❝❦❀ ❜❧♦❝❦✐♥❣ ❝❛❧❧ ♦♥❧② ✐❢ ❝❛❧❧❡r ❞♦❡s ♥♦t ❤♦❧❞ ❧❝❦ r❡t✉r♥s ♦♥❧② ✇❤❡♥ ♥♦ ♦t❤❡r t❤r❡❛❞ ❤♦❧❞s ❧❝❦ ❧❝❦✳r❡❧✭✮ / / r❡❧❡❛s❡ t❤❡ ❧♦❝❦❀ ♥♦♥✲❜❧♦❝❦✐♥❣ ❝❛❧❧ ♦♥❧② ✐❢ ❝❛❧❧❡r ❤♦❧❞s ❧❝❦ ❲❡❛❦ ❧♦❝❦✿ ❧❝❦✳❛❝q✭✮ r❡t✉r♥s ✐❢ ❧♦❝❦ ✐s ❝♦♥t✐♥✉♦✉s❧② ❢r❡❡ ❙tr♦♥❣ ❧♦❝❦✿ ❧❝❦✳❛❝q✭✮ r❡t✉r♥s ✐❢ ❧♦❝❦ ✐s r❡♣❡❛t❡❞❧② ❢r❡❡ / / ❡✈❡♥ ✐❢ ♦♥❧② ✐♥t❡r♠✐tt❡♥t❧② ❢r❡❡

slide-5
SLIDE 5

❈♦♥❞✐t✐♦♥ ✈❛r✐❛❜❧❡s

❧♦❝❦✱ ❝✈✱ s❡♠

❈♦♥❞✐t✐♦♥ ✈❛r✐❛❜❧❡ ♦♣❡r❛t✐♦♥s✿ ✇❛✐t✱ s✐❣♥❛❧ ❛♥❞ s✐❣♥❛❧❴❛❧❧ ❆ ❝♦♥❞✐t✐♦♥ ✈❛r✐❛❜❧❡ ✐s ❛ss♦❝✐❛t❡❞ ✇✐t❤ ❛ ❧♦❝❦ ❝✈ ← ❈♦♥❞✐t✐♦♥✭❧❝❦✮ / / ❝♦♥❞✐t✐♦♥ ✈❛r✐❛❜❧❡ ❛ss♦❝✐❛t❡❞ ✇✐t❤ ❧❝❦ ❝✈✳✇❛✐t✭✮ / / ✇❛✐t ♦♥ ❝✈❀ ❜❧♦❝❦✐♥❣ ❝❛❧❧ ♦♥❧② ✐❢ ❝❛❧❧❡r ❤♦❧❞s ❧❝❦ ❛t♦♠✐❝❛❧❧② r❡❧❡❛s❡ ❧❝❦ ❛♥❞ ✇❛✐t ♦♥ ❝✈ ✇❤❡♥ ❛✇❛❦❡♥❡❞✿ ❛❝q✉✐r❡ ❧❝❦ ❛♥❞ r❡t✉r♥ ❝✈✳s✐❣♥❛❧✭✮ / / s✐❣♥❛❧ ❝✈❀ ♥♦♥✲❜❧♦❝❦✐♥❣ ❝❛❧❧ ♦♥❧② ✐❢ ❝❛❧❧❡r ❤♦❧❞s ❧❝❦ ✇❛❦❡ ✉♣ ❛ t❤r❡❛❞ ✭✐❢ ❛♥②✮ ✇❛✐t✐♥❣ ♦♥ ❝✈ ❝✈✳s✐❣♥❛❧❴❛❧❧✭✮ / / ✇❛❦❡ ✉♣ ❛❧❧ t❤r❡❛❞s ✇❛✐t✐♥❣ ♦♥ ❝✈ ❧❝❦✳❛❝q✭✮ ❞♦❡s ♥♦t ❣✐✈❡ ♣r✐♦r✐t② t♦ t❤r❡❛❞s ❝♦♠✐♥❣ ❢r♦♠ ❝✈✳✇❛✐t✭✮

slide-6
SLIDE 6

❙❡♠❛♣❤♦r❡s

❧♦❝❦✱ ❝✈✱ s❡♠

❙❡♠❛♣❤♦r❡✿ ✈❛r✐❛❜❧❡ ✇✐t❤ ❛ ♥♦♥✲♥❡❣❛t✐✈❡ ✐♥t❡❣❡r ❝♦✉♥t ❙❡♠❛♣❤♦r❡ ♦♣❡r❛t✐♦♥s✿ P✭✮ ❛♥❞ ❱✭✮ s❡♠ ← ❙❡♠❛♣❤♦r❡✭◆✮ / / ❞❡✜♥❡ s❡♠❛♣❤♦r❡ ✇✐t❤ ❝♦✉♥t ◆ ✭≥ ✵✮ s❡♠✳P✭✮ / / ❜❧♦❝❦✐♥❣ ✇❛✐t ✉♥t✐❧ s❡♠✳❝♦✉♥t ❃ ✵ t❤❡♥ ❞❡❝r❡❛s❡ s❡♠✳❝♦✉♥t ❜② ✶❀ r❡t✉r♥ ❝❤❡❝❦✐♥❣ s❡♠✳❝♦✉♥t ❃ ✵ ❛♥❞ ❞❡❝r❡♠❡♥t✐♥❣ ❛r❡ ♦♥❡ ❛t♦♠✐❝ st❡♣ s❡♠✳❱✭✮ / / ♥♦♥✲❜❧♦❝❦✐♥❣ ❛t♦♠✐❝❛❧❧② ✐♥❝r❡❛s❡ s❡♠✳❝♦✉♥t ❜② ✶❀ r❡t✉r♥ ❱✭✮ ❞♦❡s ♥♦t ❣✐✈❡ ♣r✐♦r✐t② t♦ ✇❛✐t✐♥❣ t❤r❡❛❞s ❙❡♠❛♣❤♦r❡ ❝❛♥ ❜❡ str♦♥❣ ♦r ✇❡❛❦ ✭❥✉st ❧✐❦❡ ❛ ❧♦❝❦✮

slide-7
SLIDE 7

❖✉t❧✐♥❡

❛✇❛✐ts

▲♦❝❦s✱ ❝♦♥❞✐t✐♦♥ ✈❛r✐❛❜❧❡s✱ s❡♠❛♣❤♦r❡s ❆✇❛✐t✲str✉❝t✉r❡❞ ♣r♦❣r❛♠ ❆❝❤✐❡✈✐♥❣ ♣r✐♦r✐t② ❢♦r ✇❛✐t✐♥❣ t❤r❡❛❞s ❇♦✉♥❞❡❞ ❇✉✛❡r ❘❡❛❞❡rs✲❲r✐t❡rs ❘❡❛❞✲✇r✐t❡ ▲♦❝❦s

slide-8
SLIDE 8

❆✇❛✐ts

❛✇❛✐ts

❙t❛♥❞❛r❞ s②♥❝❤r♦ ❝♦♥str✉❝ts ✭✐❡✱ ❧♦❝❦✱ ❝✈✱ s❡♠✮ ❛r❡ ❧♦✇ ❧❡✈❡❧ ❍✐❣❤✲❧❡✈❡❧ ❝♦♥str✉❝t✿ ❛✇❛✐t (B) {S} / / ❛✇❛✐t B✿ S ✐❢ B ❤♦❧❞s ❡①❡❝✉t❡ S✱ ❛❧❧ ✐♥ ♦♥❡ ❛t♦♠✐❝ st❡♣ ✐❢ B ❞♦❡s ♥♦t ❤♦❧❞✱ ✇❛✐t B ❤❛s ♥♦ s✐❞❡ ❡✛❡❝t ❲❡❛❦ ❛✇❛✐t✿ ❞♦❡s S ✐❢ B ❤♦❧❞s ❝♦♥t✐♥✉♦✉s❧② ❙tr♦♥❣ ❛✇❛✐t✿ ❞♦❡s S ✐❢ B ❤♦❧❞s r❡♣❡❛t❡❞❧② / / ❡✈❡♥ ✐❢ ✐♥t❡r♠✐tt❡♥t ❛t♦♠✐❝ {S} / / s❤♦rt ❢♦r ❛✇❛✐t ✭tr✉❡✮ {S} ❆ ♣r♦❣r❛♠ ✉s✐♥❣ ❛✇❛✐ts ✐s ❡❛s✐❡r t♦ ✉♥❞❡rst❛♥❞ t❤❛♥ ♦♥❡ ✉s✐♥❣ st❞ s②♥❝❤r♦ ❝♦♥str✉❝ts ❝❛♥ ❜❡ tr❛♥s❢♦r♠❡❞ t♦ ♦♥❡ ✉s✐♥❣ st❞ s②♥❝❤r♦ ❝♦♥str✉❝ts ♦❢t❡♥ ♣r♦✈✐❞❡s ❛ ❝♦♥✈❡♥✐❡♥t ✐♥t❡r♠❡❞✐❛t❡ ♣r♦❣r❛♠

slide-9
SLIDE 9

❆✇❛✐t✲str✉❝t✉r❡❞ ♣r♦❣r❛♠

❛✇❛✐ts

❲❡ s❛② ❝♦❞❡ ❝❤✉♥❦s S ❛♥❞ T ✐♥ ❛ ♣r♦❣r❛♠ ❝♦♥✢✐❝t ✐❢ ❛ t❤r❡❛❞ ❝❛♥ ✇r✐t❡ t♦ ❛ ♠❡♠♦r② ❛r❡❛ ❛♥♦t❤❡r t❤r❡❛❞ ❝❛♥ s✐♠✉❧t❛♥❡♦✉s❧② r❡❛❞✴✇r✐t❡ t❤❡ s❛♠❡ ❛r❡❛ ❚❤✐s ✐s ❛ ❞②♥❛♠✐❝ ✭♥♦t t❡①t✉❛❧✮ ♥♦t✐♦♥ S ❛♥❞ T ❝❛♥ ✉♣❞❛t❡ t❤❡ s❛♠❡ ❧♦❝❛t✐♦♥ ❜✉t ❜❡ ❝♦♥✢✐❝t✲❢r❡❡ ✐❢ t✇♦ t❤r❡❛❞s ❝❛♥♥♦t ❡①❡❝✉t❡ t❤❡♠ s✐♠✉❧t❛♥❡♦✉s❧② S ❛♥❞ T ❝❛♥ ❜❡ t❤❡ s❛♠❡ ❝♦❞❡ ❝❤✉♥❦ S ❝♦♥✢✐❝ts ✇✐t❤ ✐ts❡❧❢ ✐❢ ✐t ✇r✐t❡s t♦ ❛ ❣❧♦❜❛❧ ❧♦❝❛t✐♦♥ x ❛♥❞ t✇♦ t❤r❡❛❞s ❝❛♥ ❡①❡❝✉t❡ S s✐♠✉❧t❛♥❡♦✉s❧② ❆✇❛✐t✲str✉❝t✉r❡❞ ♣r♦❣r❛♠✿ ❛✇❛✐ts ❛r❡ t❤❡ ♦♥❧② s②♥❝❤r♦♥✐③❛t✐♦♥ ❝♦♥str✉❝ts ❛❧❧ t❤❡ ❝♦❞❡ ♦✉ts✐❞❡ t❤❡ ❛✇❛✐ts ✐s ❝♦♥✢✐❝t✲❢r❡❡

slide-10
SLIDE 10

❊①❛♠♣❧❡ ❛✇❛✐t✲str✉❝t✉r❡❞ ♣r♦❣r❛♠

❛✇❛✐ts

Pr♦❣r❛♠ P0✿ x✱ y✿ ❣❧♦❜❛❧ ✐♥t ✈❛r✐❛❜❧❡s❀ ✐♥✐t✐❛❧❧② 0 up()✱ down() / / ❝❛❧❧❛❜❧❡ ❜② ♠✉❧t✐♣❧❡ t❤r❡❛❞s s✐♠✉❧t❛♥❡♦✉s❧② up(): int z await (x < 100): x ← x+1 z ← x return 2*z down(): int z await (x > 0): x ← x-1 z ← x return 2*z

slide-11
SLIDE 11

P0 → ❧♦❝❦✲❝✈ ♣r♦❣r❛♠ P1

❛✇❛✐ts

Pr♦❣r❛♠ P1✿ x✱ y ✴✴ ❛s ✐♥ P✵ lck ← Lock() cvNF ← Condition(lck) ✴✴ ❢♦r ❣✉❛r❞ (x < 100) cvNE ← Condition(lck) ✴✴ ❢♦r ❣✉❛r❞ (x > 0) up(): int z lck.acq() while (not x < 100): cvNF.wait() x ← x + 1 z ← x cvNE.signal() lck.rel() return 2*z down(): int z lck.acq() while (not x > 0): cvNE.wait() x ← x - 1 z ← x cvNF.signal() lck.rel() return 2*z

slide-12
SLIDE 12

P0 → ❧♦❝❦✲❝✈ ♣r♦❣r❛♠ P2

❛✇❛✐ts

Pr♦❣r❛♠ P2✿ x✱ y ✴✴ ❛s ✐♥ P✵ lck ← Lock() cv ← Condition(lck) ✴✴ ❢♦r ❜♦t❤ ❣✉❛r❞s up(): int z lck.acq() while (not x < 100): cv.wait() x ← x + 1 z ← x cv.signal_all() lck.rel() return 2*z down(): int z lck.acq() while (not x > 0): cv.wait() x ← x - 1 z ← x cv.signal_all() lck.rel() return 2*z

slide-13
SLIDE 13

P0 → s❡♠❛♣❤♦r❡ ♣r♦❣r❛♠ P✸ ✭✈✐❛ P✶✮

❛✇❛✐ts

Pr♦❣r❛♠ P3✿ x✱ y ✴✴ ❛s ✐♥ P1 mutex ← Semaphore(1) ✴✴ ❢♦r lck gateNF ← Semaphore(0) ✴✴ ❢♦r cvNF gateNE ← Semaphore(0) ✴✴ ❢♦r cvNE up(): int z mutex.P() while (not x < 100) mutex.V() gateNF.P() mutex.P() x ← x + 1 z ← x gateNE.V() mutex.V() return ← 2*z down(): int z mutex.P() while (not x > 0) mutex.V() gateNE.P() mutex.P() x ← x - 1 z ← x gateNF.V() mutex.V() return ← 2*z

slide-14
SLIDE 14

❖✉t❧✐♥❡

❛✇❛✐ts → s❡♠

▲♦❝❦s✱ ❝♦♥❞✐t✐♦♥ ✈❛r✐❛❜❧❡s✱ s❡♠❛♣❤♦r❡s ❆✇❛✐t✲str✉❝t✉r❡❞ ♣r♦❣r❛♠ ❆❝❤✐❡✈✐♥❣ ♣r✐♦r✐t② ❢♦r ✇❛✐t✐♥❣ t❤r❡❛❞s ❇♦✉♥❞❡❞ ❇✉✛❡r ❘❡❛❞❡rs✲❲r✐t❡rs ❘❡❛❞✲✇r✐t❡ ▲♦❝❦s

slide-15
SLIDE 15

▼❡t❤♦❞✿ ❆✇❛✐t → ❙❡♠ ♣r✐♦r✐t② ❢♦r ✇❛✐t✐♥❣

❛✇❛✐ts → s❡♠

❆✇❛✐t✲str✉❝t✉r❡❞ ♣r♦❣r❛♠ ✇✐t❤ ❞✐st✐♥❝t ❛✇❛✐t ❣✉❛r❞s B✶✱ · · · ✱ BN ❲❛♥t ❛♥ ❡q✉✐✈❛❧❡♥t s❡♠❛♣❤♦r❡ ♣r♦❣r❛♠ s✉❝❤ t❤❛t ♣r♦❝❡ss❡s st✉❝❦ ✐♥ ❛♥ ❛✇❛✐t ❤❛✈❡ ❤✐❣❤❡r ♣r✐♦r✐t② t❤❛♥ ♣r♦❝❡ss❡s ❛rr✐✈✐♥❣ ❢r❡s❤❧② t♦ t❤❡ ❛✇❛✐t ❙♦❧✉t✐♦♥✿ ❙❡♠❛♣❤♦r❡s mutex ❛♥❞ gate✶✱ · · · ✱ gateN ✴✴ ❛s ❜❡❢♦r❡ ❆❢t❡r ❡①❡❝✉t✐♥❣ t❤❡ ✉♣❞❛t❡ ♦❢ ❛♥ ❛✇❛✐t ❞♦ mutex✳❱✭✮ ✐❢ ♥♦ Bi ❤♦❧❞s ❛♥❞ ❤❛s ✇❛✐t✐♥❣ ♣r♦❝❡ss❡s ♦✴✇ s❡❧❡❝t ♦♥❡ s✉❝❤ Bi ❛♥❞ ❞♦ gatei.V () ✭❞♦ ♥♦t mutex✳❱✭✮✮

slide-16
SLIDE 16

▼❡t❤♦❞✿ ❆✇❛✐t → ❙❡♠ ♣r✐♦r✐t② ❢♦r ✇❛✐t✐♥❣

❛✇❛✐ts → s❡♠

❆✇❛✐t✲str✉❝t✉r❡❞ ♣r♦❣r❛♠ ✇✐t❤ ❞✐st✐♥❝t ❛✇❛✐t ❣✉❛r❞s B✶✱ · · · ✱ BN mutex ← ❙❡♠❛♣❤♦r❡✭✶✮ ❋♦r ❡✈❡r② Bi gatei ← ❙❡♠❛♣❤♦r❡✭✵✮ / / t♦ ✇❛✐t ❢♦r Bi nwi ← ✵ / / ♥✉♠❜❡r ♦❢ ♣r♦❝❡ss❡s ✇❛✐t✐♥❣ ❛t gatei ❘❡♣❧❛❝❡ ❡❛❝❤ ❛✇❛✐t (Bi) Si ❜② mutex.P() if (not Bi) nwi+ +; mutex.V(); gatei.P(); nwi- - Si for k in 1, · · · , N if (Bk and nwk > ✵) gatek.V() return mutex.V()

slide-17
SLIDE 17

❆♣♣❧②✐♥❣ ♠❡t❤♦❞ t♦ ♣r♦❣r❛♠ P0

❛✇❛✐ts → s❡♠

Pr♦❣r❛♠ P4✿ x✱ y✱ mutex✱ gateNF✱ gateNE ✴✴ ❛s ✐♥ P✷ nwNF, nwNE✿ ✐♥✐t✐❛❧❧② 0 ✴✴ ★ ✇❛✐t✐♥❣ ♦♥ gateNF✱ gateNE up(): int z mutex.P() if (not x < 100) nwNF + + mutex.V(); gateNF.P() nwNF - - x ← x+1 z ← x if x > 0 and nwNE > 0 gateNE.V() else mutex.V() return 2*z down(): int z mutex.P() if (not x > 0) nwNE + + mutex.V(); gateNE.P() nwNE - - x ← x - 1 z ← x if x < 100 and nwNF > 0 gateNF.V() else mutex.V() return 2*z

slide-18
SLIDE 18

❖✉t❧✐♥❡

❜♦✉♥❞❡❞ ❜✉✛❡r

▲♦❝❦s✱ ❝♦♥❞✐t✐♦♥ ✈❛r✐❛❜❧❡s✱ s❡♠❛♣❤♦r❡s ❆✇❛✐t✲str✉❝t✉r❡❞ ♣r♦❣r❛♠ ❆❝❤✐❡✈✐♥❣ ♣r✐♦r✐t② ❢♦r ✇❛✐t✐♥❣ t❤r❡❛❞s ❇♦✉♥❞❡❞ ❇✉✛❡r ❘❡❛❞❡rs✲❲r✐t❡rs ❘❡❛❞✲✇r✐t❡ ▲♦❝❦s

slide-19
SLIDE 19

❇♦✉♥❞❡❞ ❇✉✛❡r Pr♦❜❧❡♠

❜♦✉♥❞❡❞ ❜✉✛❡r

  • ✐✈❡♥ BB

/ / ❤❛s ♥♦ s②♥❝❤r♦♥✐③❛t✐♦♥ buf✿ ❜✉✛❡r ♦❢ ❝❛♣❛❝✐t② N ✐t❡♠s num✿ ♥✉♠❜❡r ♦❢ ✐t❡♠s ✐♥ buf add(x)✿ ❛❞❞ ✐t❡♠ x t♦ buf❀ ♥♦♥✲❜❧♦❝❦✐♥❣ rmv()✿ r❡t✉r♥ ❛♥ ✐t❡♠ ❢r♦♠ buf❀ ♥♦♥✲❜❧♦❝❦✐♥❣ ❖❜t❛✐♥ enQ(x) ❛♥❞ deQ() s✉❝❤ t❤❛t ❝❛❧❧❛❜❧❡ ❜② ♠✉❧t✐♣❧❡ t❤r❡❛❞s s✐♠✉❧t❛♥❡♦✉s❧② ✴ ✴ s❛❢❡t② enQ(x) ❝❛❧❧s add(x) ♦♥❝❡✱ ✇❛✐t✐♥❣ ✐❢ buf ✐s ❢✉❧❧ ✴ ✴ ✧ ✧ deQ() ❝❛❧❧s rmv() ♦♥❝❡✱ ✇❛✐t✐♥❣ ✐❢ buf ✐s ❡♠♣t② ✴ ✴ ✧ ✧ ❛t ♠♦st ♦♥❡ add() ♦r rmv() ♦♥❣♦✐♥❣ ❛t ❛♥② t✐♠❡ ✴ ✴ ✧ ✧ ✐❢ buf ♥♦t ❢✉❧❧ ❛♥❞ ❛t ❧❡❛st ♦♥❡ enQ() ♦♥❣♦✐♥❣✱ ❡✈❡♥t✉❛❧❧② ❛♥ enQ() r❡t✉r♥s ✴ ✴ ♣r♦❣r❡ss ✐❢ buf ♥♦t ❡♠♣t② ❛♥❞ ❛t ❧❡❛st ♦♥❡ deQ() ♦♥❣♦✐♥❣✱ ❡✈❡♥t✉❛❧❧② ❛ deQ() r❡t✉r♥s ✴ ✴ ✧ ✧

slide-20
SLIDE 20

❙♦❧✉t✐♦♥ ✉s✐♥❣ ❆✇❛✐ts

❜♦✉♥❞❡❞ ❜✉✛❡r

Pr♦❣r❛♠ BB0✿ buf✱ num✱ add(x)✱ rmv() ✴ ✴ ❛s ✐♥ BB enQ(x): await (num < N): add(x) return deQ(): await (num > 0): tmp ← rmv() return tmp ❛✇❛✐ts ✇✐t❤ ✇❡❛❦ ♣r♦❣r❡ss ❛❞❡q✉❛t❡ t♦ ❛❝❤✐❡✈❡ ❞❡s✐r❡❞ ♣r♦❣r❡ss ✭❞♦ ♥♦t r❡q✉✐r❡ ♣r♦❣r❡ss ❢♦r ❡✈❡r② ✇❛✐t✐♥❣ enQ ♦r deQ✮

slide-21
SLIDE 21

Pr♦❣r❛♠ BB0 → ▲♦❝❦✲❝✈ ♣r♦❣r❛♠

❜♦✉♥❞❡❞ ❜✉✛❡r

Pr♦❣r❛♠ BB1 buf✱ num✱ add(x)✱ rmv() ✴ ✴ ❛s ✐♥ BB0 lck✿ ❧♦❝❦ cvNF✱ cvNE✿ ❝♦♥❞ ✈❛rs ✴✴ ♥♦t✲❢✉❧❧✱ ♥♦t✲❡♠♣t② enQ(x): lck.acq() while (num = N): cvNF.wait() add(x) cvNE.signal() if num < N: cvNF.signal() lck.rel() return deQ(): lck.acq() while (num = 0): cvNE.wait() tmp ← rmv() cvNF.signal() if num > 0: cvNE.signal() lck.rel() return tmp ■s r❡❞ ❝♦❞❡ ♥❡❡❞❡❞❄

slide-22
SLIDE 22

Pr♦❣r❛♠ BB0 → s❡♠❛♣❤♦r❡ ♣r♦❣r❛♠

❜♦✉♥❞❡❞ ❜✉✛❡r

Pr♦❣r❛♠ BB2✿ buf✱ num✱ add(x)✱ rmv() ✴ ✴ ❛s ✐♥ BB0 Semaphore(1) mutex Semaphore(0) gateNF, gateNE nwNF, nwNE✿ ✐♥✐t✐❛❧❧② 0 enQ(x): mutex.P() while num = N: nwNF + + mutex.V(); gateNF.P() nwNF - - add(x) if num > 0 and nwNE > 0: gateNE.V() else mutex.V() return deQ(): mutex.P() while num = 0: nwNE + + mutex.V(); gateNE.P() nwNE - - tmp ← rmv() if x < 100 and nwNF > 0: gateNF.V() else mutex.V() return tmp

slide-23
SLIDE 23

◆♦♥✲st❛♥❞❛r❞ s♦❧✉t✐♦♥ ✉s✐♥❣ s❡♠♣❛❤♦r❡s

❜♦✉♥❞❡❞ ❜✉✛❡r

Pr♦❣r❛♠ BB3✿ buf✱ num✱ add(x)✱ rmv() ✴ ✴ ❛s ✐♥ BB Semaphore(1) mutex Semaphore(N) nSpace Semaphore(0) nItem enQ(x): nSpace.P() mutex.P() add(x) mutex.V() nItem.V() return deQ(): nItem.P() mutex.P() tmp ← rmv() mutex.V() nSpace.V() return tmp ❈✉t❡✳ ❇✉t ♥♦t ❛❞❛♣t❛❜❧❡✳

slide-24
SLIDE 24

❇♦✉♥❞❡❞ ❇✉✛❡r ✇✐t❤ ✈❛r✐❛❜❧❡✲s✐③❡ ✐t❡♠s

❜♦✉♥❞❡❞ ❜✉✛❡r

▲✐❦❡ t❤❡ ❜♦✉♥❞❡❞✲❜✉✛❡r ❡①❝❡♣t buf ❤❛s ❛ ❝❛♣❛❝✐t② ♦❢ N ❜②t❡s num✿ ✐♥❞✐❝❛t❡s ❛✈❛✐❧❛❜❧❡ ❜②t❡s ✐♥ buf add(x,k)✿ ❛❞❞ ✐t❡♠ x ♦❢ s✐③❡ k ❜②t❡s rmv(k)✿ r❡t✉r♥ ❛♥ ✐t❡♠ ♦❢ s✐③❡ k ❜②t❡s Pr❡✈✐♦✉s ❛✇❛✐t✲str✉❝t✉r❡❞ s♦❧✉t✐♦♥ BB0 ✐s ❡❛s✐❧② ❛❞❛♣t❡❞ enQ(x,k): await (num ≤ N - k) add(x,k) deQ(k): await (num ≥ k) tmp ← rmv(k) return tmp ❈❛♥ tr❛♥s❢♦r♠ ❛❜♦✈❡ t♦ ✉s✐♥❣ st❛♥❞❛r❞ s②♥❝❤ ❝♦♥str✉❝ts ❊①❡r❝✐s❡✿ ❝❛♥ ②♦✉ ❛❞❛♣t ♣r♦❣r❛♠ BB3 t♦ s♦❧✈❡ t❤✐s

slide-25
SLIDE 25

❖✉t❧✐♥❡

r❡❛❞❡r✲✇r✐t❡r

▲♦❝❦s✱ ❝♦♥❞✐t✐♦♥ ✈❛r✐❛❜❧❡s✱ s❡♠❛♣❤♦r❡s ❆✇❛✐t✲str✉❝t✉r❡❞ ♣r♦❣r❛♠ ❆❝❤✐❡✈✐♥❣ ♣r✐♦r✐t② ❢♦r ✇❛✐t✐♥❣ t❤r❡❛❞s ❇♦✉♥❞❡❞ ❇✉✛❡r ❘❡❛❞❡rs✲❲r✐t❡rs ❘❡❛❞✲✇r✐t❡ ▲♦❝❦s

slide-26
SLIDE 26

❘❡❛❞❡rs✲❲r✐t❡rs Pr♦❜❧❡♠

r❡❛❞❡r✲✇r✐t❡r

  • ✐✈❡♥ ♥♦♥✲❜❧♦❝❦✐♥❣ ❢✉♥❝t✐♦♥s read()✱ write()

❖❜t❛✐♥ ❢✉♥❝t✐♦♥s cread()✱ cwrite() s✉❝❤ t❤❛t ✶ ❡❛❝❤ ✐s ❝❛❧❧❛❜❧❡ ❜② ♠✉❧t✐♣❧❡ t❤r❡❛❞s s✐♠✉❧t❛♥❡♦✉s❧② ✷ cread() ❝❛❧❧s read() ♦♥❝❡✱ ✇❛✐ts ✐❢ ♦♥❣♦✐♥❣ write() ✸ cwrite ❝❛❧❧s write() ♦♥❝❡✱ ✇❛✐ts ✐❢ ♦♥❣♦♥❣ write() ♦r read() ✹ ❛❧❧♦✇ ♠✉❧t✐♣❧❡ ♦♥❣♦✐♥❣ read() ❝❛❧❧s ✺ ✐❢ ❡✈❡r② read() ❛♥❞ write() ❝❛❧❧ r❡t✉r♥s t❤❡♥ ❛ ❡✈❡r② cread() ❝❛❧❧ ❡✈❡♥t✉❛❧❧② r❡t✉r♥s ❜ ❡✈❡r② cwrite() ❝❛❧❧ ❡✈❡♥t✉❛❧❧② r❡t✉r♥s ✶✕✹ ❛r❡ s❛❢❡t② r❡q✉✐r❡♠❡♥ts ✺ ✐s ❛ ♣r♦❣r❡ss r❡q✉✐r❡♠❡♥t

slide-27
SLIDE 27

❈♦♥s❡q✉❡♥❝❡ ♦❢ s❛❢❡t② r❡q✉✐r❡♠❡♥ts

r❡❛❞❡r✲✇r✐t❡r

❊✈❡r② ❡✈♦❧✉t✐♦♥ ♦❢ ❛ s♦❧✉t✐♦♥ ✐s ❛♥ ❛❧t❡r♥❛t✐♥❣ s❡q✉❡♥❝❡ ♦❢ ✐❞❧❡ ✐♥t❡r✈❛❧s ❛♥❞ ❜✉s② ✐♥t❡r✈❛❧s ❆♥ ✐❞❧❡ ✐♥t❡r✈❛❧ ❤❛s ♥♦ r❡❛❞ ♦r ✇r✐t❡ ❆ ❜✉s② ✐♥t❡r✈❛❧ ✐s ❡✐t❤❡r ❛ r❡❛❞ ✐♥t❡r✈❛❧ ♦r ❛ ✇r✐t❡ ✐♥t❡r✈❛❧ ❆ ✇r✐t❡ ✐♥t❡r✈❛❧ ❤❛s ❡①❛❝t❧② ♦♥❡ ✇r✐t❡ ❆ r❡❛❞ ✐♥t❡r✈❛❧ ❤❛s ♦♥❡ ♦r ♠♦r❡ r❡❛❞s ✐t st❛rts ✇✐t❤ t❤❡ ✜rst read() ❝❛❧❧ ✐t ❡♥❞s ✇❤❡♥ t❤❡ ❧❛st read() r❡t✉r♥

slide-28
SLIDE 28

❘❲✶✿ ♣❛rt✐❛❧ s♦❧✉t✐♦♥ ✉s✐♥❣ ❛✇❛✐ts

r❡❛❞❡r✲✇r✐t❡r

Pr♦❣r❛♠ RW1✿ nR ← 0 / / ♥✉♠❜❡r ♦❢ ♦♥❣♦✐♥❣ r❡❛❞s nW ← 0 / / ♥✉♠❜❡r ♦❢ ♦♥❣♦✐♥❣ ✇r✐t❡s cread(): r1: await (nW = 0) nR ++ read() r2: await (true) nR -- cwrite(): w1: await (nW = nR = 0) nW ++ write() w2: await (true) nW -- ❲❡❛❦ ❛✇❛✐ts✿ ❘❲✶ ❞♦❡s ♥♦t s❛t✐s❢② r❡q✉✐r❡♠❡♥t ✺ ✭❡❣✱ t❤r❡❛❞ st✉❝❦ ❛t r1 ❞✉❡ t♦ ❡♥❞❧❡ss str❡❛♠ ♦❢ r❡❛❞s✴✇r✐t❡s✮ ❙tr♦♥❣ ❛✇❛✐ts✿ ❘❲✶ s❛t✐s✜❡s ✺❛ ❜✉t ♥♦t ✺❜ ✭t❤r❡❛❞ st✉❝❦ ❛t w1 ❞✉❡ t♦ ❡♥❞❧❡ss str❡❛♠ ♦❢ r❡❛❞s✮

slide-29
SLIDE 29

❘❲✷✿ ▲♦❝❦✲❝✈ ✈❡rs✐♦♥ ♦❢ ❘❲✶

r❡❛❞❡r✲✇r✐t❡r

Pr♦❣r❛♠ ❘❲✷✿ nR, nW✿ ✐♥✐t✐❛❧❧② 0 ✴✴ ❛s ✐♥ RW1 lck✱ cvR✱ cvW ✴✴ ❧♦❝❦✱ ❝✈✲r❡❛❞✱ ❝✈✲✇r✐t❡ cread(): lck.acq() while not nW = 0: cvR.wait() nR ++ lck.rel() read() lck.acq() nR -- if nR = 0: cvW.signal() cvR.signal() lck.rel() cwrite(): lck.acq() while not nW = nR = 0: cvW.wait() nW ++ lck.rel() write() lck.acq() nW -- cvW.signal() cvR.signal() lck.rel()

slide-30
SLIDE 30

❘❲✷❛✿ s✐♠♣❧✐✜❡❞ ❘❲✷

r❡❛❞❡r✲✇r✐t❡r

❲❤✐❧❡ write() ♦♥❣♦✐♥❣✱ ♥♦ ♦t❤❡r read() ♦r write() ♦♥❣♦✐♥❣ ❍❡♥❝❡ ❝❛♥ r❡♠♦✈❡ lck.rel ❛♥❞ lck.acq s✉rr♦✉♥❞✐♥❣ write() ❚❤❡♥ nW ✐s ❛❧✇❛②s ✵✱ s♦ ❝❛♥ s✐♠♣❧✐❢② ❝♦❞❡ Pr♦❣r❛♠ ❘❲✷❛✿ nR✱ lck✱ cvW ✴✴ ❛s ✐♥ ❘❲✷❀ ♥♦ ♥❡❡❞ ❢♦r nW✱ cvR cread(): lck.acq() nR ++ lck.rel() read() lck.acq() nR -- if (nR = 0) cvW.signal() lck.rel() cwrite(): lck.acq() while (not nR = 0) cvW.wait() write() cvW.signal() lck.rel()

slide-31
SLIDE 31

❙❡♠❛♣❤♦r❡ ✈❡rs✐♦♥s ♦❢ ❘❲✶

r❡❛❞❡r✲✇r✐t❡r

❙❡✈❡r❛❧ ✇❛②s t♦ tr❛♥s❢♦r♠ ♣r♦❣r❛♠ ❘❲✶ t♦ ❛ s❡♠❛♣❤♦r❡ ♣r♦❣r❛♠ ❛♣♣❧② ✏❧♦❝❦✲❝✈ → s❡♠❛♣❤♦r❡✑ tr❛♥s❢♦r♠❛t✐♦♥ ♦♥ ❘❲✷ ❛♣♣❧② ✏❧♦❝❦✲❝✈ → s❡♠❛♣❤♦r❡✑ tr❛♥s❢♦r♠❛t✐♦♥ ♦♥ ❘❲✷❛ ❛♣♣❧② ✏❛✇❛✐t → s❡♠❛♣❤♦r❡ ✇✐t❤ ❛✇❛❦❡♥❡❞ ♣r✐♦r✐t②✑ ♦♥ ❘❲✶ ▲❡❢t ❛s ❡①❡r❝✐s❡s

slide-32
SLIDE 32

❘❲✸✿ ❛♥♦t❤❡r ♣❛rt✐❛❧ s❡♠❛♣❤♦r❡ s♦❧✉t✐♦♥ ✕ ✶

r❡❛❞❡r✲✇r✐t❡r

❋♦❧❧♦✇✐♥❣ ✐s t❤❡ ♣❛rt✐❛❧ s♦❧✉t✐♦♥ ✉s✉❛❧❧② ❣✐✈❡♥ ✐♥ t❡①ts ❱❛r✐❛❜❧❡s Semaphore(1) wrt✿ ♣r♦t❡❝ts ❡✈❡r② ❜✉s② ✐♥t❡r✈❛❧ wrt.P() ✐s ❞♦♥❡ ❛t t❤❡ st❛rt ♦❢ t❤❡ ✐♥t❡r✈❛❧ wrt.V() ✐s ❞♦♥❡ ❛t t❤❡ ❡♥❞ ♦❢ t❤❡ ✐♥t❡r✈❛❧ int nR✿ ♥✉♠❜❡r ♦❢ ♦♥❣♦✐♥❣ r❡❛❞s ❢♦r ❞❡t❡❝t✐♥❣ t❤❡ st❛rt ❛♥❞ ❡♥❞ ♦❢ ❛ r❡❛❞ ✐♥t❡r✈❛❧ Semaphore(1) mutex✿ ♣r♦t❡❝ts nR ◆♦t❡ ■♥ ❛ r❡❛❞ ✐♥t❡r✈❛❧ ♦❢ ♠♦r❡ t❤❛♥ ♦♥❡ r❡❛❞✱ wrt.P() ❛♥❞ wrt.V() ❛r❡ ❞♦♥❡ ✐♥ ❞✐✛❡r❡♥t cread ❝❛❧❧s ■❢ r❡❛❞ t❤r❡❛❞s ❛r❡ ❜❧♦❝❦❡❞ ✭❞✉❡ t♦ ♦♥❣♦✐♥❣ ✇r✐t❡✮✱ ♦♥❡ ✐s ✇❛✐t✐♥❣ ♦♥ wrt ❛♥❞ t❤❡ ♦t❤❡rs ♦♥ mutex

slide-33
SLIDE 33

❘❲✸✿ ♣❛rt✐❛❧ s♦❧✉t✐♦♥ ✉s✐♥❣ s❡♠❛♣❤♦r❡s ✕ ✷

r❡❛❞❡r✲✇r✐t❡r

cread(): mutex.P() nR + + if (nR = 1) wrt.P() mutex.V() read() mutex.P() nR - - if (nR = 0) wrt.V() mutex.V() cwrite(): wrt.P() write() wrt.V() ❈✉t❡✳ ❇✉t ♥♦t ❡❛s✐❧② ♠♦❞✐✜❡❞ t♦ s❛t✐s❢② r❡q✉✐r❡♠❡♥t ✺❜✳

slide-34
SLIDE 34

❘❲✹✿ s♦❧✉t✐♦♥ ✉s✐♥❣ ❛✇❛✐ts ✕ ✶

r❡❛❞❡r✲✇r✐t❡r

❖♥❡ ✇❛② t♦ s❛t✐s❢② r❡q✉✐r❡♠❡♥t ✺❜ ✐s t♦ ✐♠♣♦s❡ ❛ ❧✐♠✐t✱ s❛② N✱ ♦♥ t❤❡ ♥✉♠❜❡r ♦❢ ❝♦♥s❡❝✉t✐✈❡ r❡❛❞s ✇❤✐❧❡ ❛ ✇r✐t❡r ✐s ✇❛✐t✐♥❣✳ ❱❛r✐❛❜❧❡s nR ← 0✿ ★ ♦♥❣♦✐♥❣ r❡❛❞s nW ← 0✿ ★ ♦♥❣♦✐♥❣ ✇r✐t❡s ncR ← 0✿ ★ ♦❢ r❡❛❞s s✐♥❝❡ ❧❛st ✇r✐t❡ ✐♥❝r❡♠❡♥t❡❞ ✇❤❡♥ ❛ r❡❛❞ st❛rts ③❡r♦❡❞ ✇❤❡♥ ❛ ✇r✐t❡ st❛rts nwW ← 0✿ ♥✉♠❜❡r ♦❢ ✇❛✐t✐♥❣ ✇r✐t❡s ✐♥❝r❡♠❡♥t❡❞ ✇❤❡♥ ❛ t❤r❡❛❞ ❡♥t❡rs cwrite ❞❡❝r❡♠❡♥t❡❞ ✇❤❡♥ t❤❡ t❤r❡❛❞ st❛rts t♦ ✇r✐t❡

slide-35
SLIDE 35

❘❲✹✿ s♦❧✉t✐♦♥ ✉s✐♥❣ ❛✇❛✐ts ✕ ✷

r❡❛❞❡r✲✇r✐t❡r

cread(): await (nW = 0 and (ncR < N or nwW = 0) ) nR + + ncR + + read() await (true) nR - - cwrite(): await (true) nwW + + await (nW = nR = 0) nW + + nwW - - ncR ← 0 write() await (true) nW - - ❊①❡r❝✐s❡✿ tr❛♥s❢♦r♠ t♦ ❧♦❝❦✲❝✈ ❛♥❞ s❡♠❛♣❤♦r❡ ♣r♦❣r❛♠s

slide-36
SLIDE 36

❖✉t❧✐♥❡

r❡❛❞❡r✲✇r✐t❡r

▲♦❝❦s✱ ❝♦♥❞✐t✐♦♥ ✈❛r✐❛❜❧❡s✱ s❡♠❛♣❤♦r❡s ❆✇❛✐t✲str✉❝t✉r❡❞ ♣r♦❣r❛♠ ❆❝❤✐❡✈✐♥❣ ♣r✐♦r✐t② ❢♦r ✇❛✐t✐♥❣ t❤r❡❛❞s ❇♦✉♥❞❡❞ ❇✉✛❡r ❘❡❛❞❡rs✲❲r✐t❡rs ❘❡❛❞✲✇r✐t❡ ▲♦❝❦s

slide-37
SLIDE 37

❘❡❛❞✲✇r✐t❡ ❧♦❝❦

r❡❛❞❡r✲✇r✐t❡r

❆ r❡❛❞✲✇r✐t❡ ❧♦❝❦ ❝❛♥ ❜❡ ❤❡❧❞ ❛s ❛ ✏r❡❛❞✲❧♦❝❦✑ ♦r ❛s ❛ ✏✇r✐t❡✲❧♦❝❦✑ ❈❛♥ ✈✐❡✇ ✐t ❛s ❝♦♥s✐st✐♥❣ ♦❢ ♦♥❡ ✇r✐t❡✲❧♦❝❦ ❛♥❞ ♠❛♥② r❡❛❞✲❧♦❝❦s ❆t ❛♥② t✐♠❡✱ ❬★ ✇❧♦❝❦s✱ ★ r❧♦❝❦s❪ ❤❡❧❞ ✐s ❬✵✱ ✵❪✱ ❬✵✱ ❃✵❪✱ ♦r ❬✶✱ ✵❪ ❖♣❡r❛t✐♦♥s rwlck ← ❘❡❛❞❲r✐t❡▲♦❝❦✭✮ / / ❞❡✜♥❡ ❛ r❡❛❞✲✇r✐t❡ ❧♦❝❦ rwlck.acqR() / / ❛❝q✉✐r❡ r❡❛❞✲❧❝❦❀ ❜❧♦❝❦✐♥❣ rwlck.relR() / / r❡❧❡❛s❡ r❡❛❞✲❧♦❝❦❀ ♥♦♥✲❜❧♦❝❦✐♥❣ rwlck.acqW() / / ❛❝q✉✐r❡ ✇r✐t❡✲❧❝❦❀ ❜❧♦❝❦✐♥❣ rwlck.relW() / / r❡❧❡❛s❡ ✇r✐t❡✲❧♦❝❦❀ ♥♦♥✲❜❧♦❝❦✐♥❣ ❈❛❧❧ acqR() ♦r acqW() ♦♥❧② ✐❢ ❝❛❧❧❡r ❞♦❡s ♥♦t ❤❛✈❡ ❧♦❝❦ ❈❛❧❧ relR() ♦r relW() ♦♥❧② ✐❢ ❝❛❧❧❡r ❤❛s t❤❡ ❛♣♣r♦♣r✐❛t❡ ❧♦❝❦ ❲❡❛❦ ❧♦❝❦✿ acqX() r❡t✉r♥s ✐❢ ❧♦❝❦ ✐s ❝♦♥t✐♥✉♦✉s❧② ❢r❡❡ ❙tr♦♥❣ ❧♦❝❦✿ acqX() r❡t✉r♥s ✐❢ ❧♦❝❦ ✐s r❡♣❡❛t❡❞❧② ❢r❡❡ / / ❡✈❡♥ ✐❢ ♦♥❧② ✐♥t❡r♠✐tt❡♥t❧② ❢r❡❡

slide-38
SLIDE 38

■♠♣❧❡♠❡♥t✐♥❣ r❡❛❞✲✇r✐t❡ ❧♦❝❦s

r❡❛❞❡r✲✇r✐t❡r

❆♥② r❡❛❞❡rs✲✇r✐t❡rs s♦❧✉t✐♦♥ ②✐❡❧❞s ❛ r❡❛❞✲✇r✐t❡ ❧♦❝❦ ❲❡❛❦ ♦r str♦♥❣ ❞❡♣❡♥❞✐♥❣ ♦♥ r❡❛❞❡rs✲✇r✐t❡rs s♦❧✉t✐♦♥ Pr♦❣r❛♠ r❡❛❞❡rs✲✇r✐t❡rs ✈❛r✐❛❜❧❡s cread(): entry code / / acqR() read() exit code / / relR() cwrite(): entry code / / acqW() write() exit code / / relW()