14
Paralelní programování Synchronizační vzory – bariéra

Paralelní programování

  • Upload
    carney

  • View
    59

  • Download
    0

Embed Size (px)

DESCRIPTION

Paralelní programování. Synchronizační vzory – bariéra. Synchronizační vzory – mutex. kolik semaforů? jaká počáteční hodnota?. Synchronizační vzory – mutex. kritická sekce acquire = wait, release = signal multiplex?. Synchronizační vzory – multiplex. semafor zámek - PowerPoint PPT Presentation

Citation preview

Page 1: Paralelní programování

Paralelní programování

Synchronizační vzory – bariéra

Page 2: Paralelní programování

Synchronizační vzory – mutex

• kolik semaforů?• jaká počáteční hodnota?

Mach Šebestováa1 count = count + 1 b1 count = count + 1

Page 3: Paralelní programování

Synchronizační vzory – mutex

• kritická sekce• acquire = wait, release = signal• multiplex?

Mach Šebestovámutex(1)

a1 mutex.acquire() b1 mutex.acquire()

a2 count = count + 1 b2 count = count + 1

a3 mutex.release() b3 mutex.release()

Page 4: Paralelní programování

Synchronizační vzory – multiplex

• semafor <> zámek• token, místnost, povolenka, permanentka• symetrické

Mach Šebestovámutex(n)

a1 mutex.acquire() b1 mutex.acquire()

a2 count = count + 1 b2 count = count + 1

a3 mutex.release() b3 mutex.release()

Page 5: Paralelní programování

Dežo v mutexu

Page 6: Paralelní programování

Synchronizační vzory – bariéra• symetrické rendezvous pro libovolný počet

vláken• všechna vlákna musí počkat až projdou bodem

setkání• po příchodu posledního vlákna mohou všichni

pokračovat dál• realizace

• n vláken• poslední vlákno otevře bariéru

Page 7: Paralelní programování

Synchronizační vzory – bariéra

mutex.wait()count = count + 1

mutex.signal()

if count == nbarrier.signal()

barrier.wait() kdy funguje?kdy nefunguje?

Page 8: Paralelní programování

Bariéra – turniket

mutex.wait()count = count + 1

mutex.signal()

if count == nbarrier.signal()

barrier.wait()barrier.signal()

Page 9: Paralelní programování

Synchronizační vzory – bariéra• praktické využití

• pracovní vlákna• po dokončení práce se výsledky spojí• rozdá se nová práce

• spouští se v cyklu• potřebujeme bariéru, kterou lze znovu použít• wait v kritické sekci (uvnitř mutexu) je

nepoužitelný• turniket – bod, kterým vlákna prochází po

jednom, ale bez zdržení

Page 10: Paralelní programování

Deadlock - drobná chybka

mutex.wait()count = count + 1if count == n

barrier.signal()barrier.wait()

barrier.signal()mutex.signal()

Page 11: Paralelní programování

Bariéra – další (ne)řešení

mutex.wait()count = count + 1

mutex.signal()

if count == nturnstile.signal()

turnstile.wait()turnstile.signal()

mutex.wait()count = count – 1

mutex.signal()

if count == 0turnstile.wait();

problem?

Page 12: Paralelní programování

Bariéra – další řešení

mutex.wait()count = count + 1if count == n

turnstile2.wait()turnstile.signal()

mutex.signal()

turnstile.wait()turnstile.signal()/* process */mutex.wait()

count = count – 1if count == 0

turnstile.wait();turnstile2.signal();

mutex.signal()

turnstile2.wait()turnstile2.signal();

počáteční hodnoty?

Page 13: Paralelní programování

Bariéra – další řešení

mutex.wait()count = count + 1if count == nturnstile.signal(n)

mutex.signal()

turnstile.wait()/* process */mutex.wait()

count = count – 1if count == 0turnstile2.signal(n);

mutex.signal()

turnstile2.wait()

Page 14: Paralelní programování