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

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

Paralelní programování

Podobné prezentace


Prezentace na téma: "Paralelní programování"— Transkript prezentace:

1 Paralelní programování
Synchronizace – složitější vzory

2 Synchronizační vzory – fronta
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 Smí pokračovat v párech
menQueue.signal() womenQueue.wait() marry() womenQueue.signal() menQueue.wait()

4 Musí pokračovat v párech – muž
mutex.wait() if women > 0 women = women – 1 womenQueue.signal() else men = men + 1 mutex.signal() menQueue.wait() marry() marriageDone.wait()

5 Musí pokračovat v párech – žena
mutex.wait() if men > 0 men = men – 1 menQueue.signal() else women = women + 1 mutex.signal() womenQueue.wait() marry() marriageDone.signal()

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

7 Producent – konzument 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() data = buffer.pop buffer.push(data) processData(data)

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

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

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

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

12 Producent – konzument – konečný
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 Producent data = obtainData() spaces.wait() mutex.wait()
buffer.push(data) mutex.signal() items.signal()

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

15 Zdroj obrázku: http://www. adamweitz


Stáhnout ppt "Paralelní programování"

Podobné prezentace


Reklamy Google