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

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

Synchronizační vzory – bariéra. kolik semaforů? jaká počáteční hodnota? MachŠebestová a1a1count = count + 1b1count = count + 1.

Podobné prezentace


Prezentace na téma: "Synchronizační vzory – bariéra. kolik semaforů? jaká počáteční hodnota? MachŠebestová a1a1count = count + 1b1count = count + 1."— Transkript prezentace:

1 Synchronizační vzory – bariéra

2 kolik semaforů? jaká počáteční hodnota? MachŠebestová a1a1count = count + 1b1count = count + 1

3 kritická sekce acquire = wait, release = signal multiplex? MachŠebestová mutex(1) a1mutex.acquire()b1mutex.acquire() a2count = count + 1b2count = count + 1 a3mutex.release()b3mutex.release()

4 semafor <> zámek token, místnost, povolenka, permanentka symetrické MachŠebestová mutex(n) a1mutex.acquire()b1mutex.acquire() a2count = count + 1b2count = count + 1 a3mutex.release()b3mutex.release()

5

6 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

7 mutex.wait() count = count + 1 mutex.signal() if count == n barrier.signal() barrier.wait() kdy funguje? kdy nefunguje?

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

9 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í

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

11 mutex.wait() count = count + 1 mutex.signal() if count == n turnstile.signal() turnstile.wait() turnstile.signal() mutex.wait() count = count – 1 mutex.signal() if count == 0 turnstile.wait(); problem?

12 mutex.wait() count = count + 1 if count == n turnstile2.wait() turnstile.signal() mutex.signal() turnstile.wait() turnstile.signal() /* process */ mutex.wait() count = count – 1 if count == 0 turnstile.wait(); turnstile2.signal(); mutex.signal() turnstile2.wait() turnstile2.signal(); počáteční hodnoty?

13 mutex.wait() count = count + 1 if count == n turnstile.signal(n) mutex.signal() turnstile.wait() /* process */ mutex.wait() count = count – 1 if count == 0 turnstile2.signal(n); mutex.signal() turnstile2.wait()

14


Stáhnout ppt "Synchronizační vzory – bariéra. kolik semaforů? jaká počáteční hodnota? MachŠebestová a1a1count = count + 1b1count = count + 1."

Podobné prezentace


Reklamy Google