Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Synchronizace – složitější vzory. máme dva druhy vláken pokračovat smí jen v párech 2 varianty smí pokračovat v párech danou činnost může vyvíjet n vláken.

Podobné prezentace


Prezentace na téma: "Synchronizace – složitější vzory. máme dva druhy vláken pokračovat smí jen v párech 2 varianty smí pokračovat v párech danou činnost může vyvíjet n vláken."— Transkript prezentace:

1 Synchronizace – složitější vzory

2 máme dva druhy vláken pokračovat smí jen v párech 2 varianty smí pokračovat v párech danou činnost může vyvíjet n vláken současně ale budou stejné počty stejných typů musí pokračovat v párech tj. danou činnost smí vyvíjet pouze dvě vlákna současně

3 menQueue.signal() womenQueue.wait() marry() womenQueue.signal() menQueue.wait() marry()

4 mutex.wait() if women > 0 women = women – 1 womenQueue.signal() else men = men + 1 mutex.signal() menQueue.wait() marry() marriageDone.wait() mutex.signal()

5 mutex.wait() if men > 0 men = men – 1 menQueue.signal() else women = women + 1 mutex.signal() womenQueue.wait() marry() marriageDone.signal()

6 typické úlohy pro řešení se používají synchronizační vzory rendez-vous, bariéra, turniket, fronta

7 více producentů více konzumentů sdílená paměť – buffer konzument odebírá data z paměti k paměti může přistupovat pouze jeden čtení i zápis je exkluzivní data = obtainData() buffer.push(data) data = buffer.pop processData(data)

8 data = obtainData() mutex.wait() buffer.push(data) items.signal() mutex.signal()

9 items.wait() mutex.wait() data = buffer.pop() mutex.signal() processData(data)

10 data = obtainData() mutex.wait() buffer.push(data) mutex.signal() items.signal() změna?

11 mutex.wait() items.wait() data = buffer.pop() mutex.signal() processData(data) problém?

12 Reálně má buffer konečnou kapacitu v případě producent2 ani neznáme aktuální obsazení bufferu pokud je buffer plný, musí producenti čekat na uvolnění pokud je buffer prázdný, musí konzumenti čekat na naplnění

13 data = obtainData() spaces.wait() mutex.wait() buffer.push(data) mutex.signal() items.signal()

14 items.wait() mutex.wait() data = buffer.pop() mutex.signal() spaces.signal() processData(data)

15


Stáhnout ppt "Synchronizace – složitější vzory. máme dva druhy vláken pokračovat smí jen v párech 2 varianty smí pokračovat v párech danou činnost může vyvíjet n vláken."

Podobné prezentace


Reklamy Google