Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Maximilian Arnold Geändert vor über 9 Jahren
1
Parallel Programming Semaphores / Reader - Writer - Lock http://n.ethz.ch/~klauserc/FS10/PP/
2
Übersicht 1. Semaphores 1. Semaphores in der Theorie 2. Semaphores in Java 3. Semaphores und Monitors 2. Reader - Writer - Lock
3
1. SEMAPHORS 1. Seamphores in der Theorie
4
Semaphore, Definition Konstrukt zur Synchoronisierung von parallelen Abläufen. Stellt zwei Operationen zur Verfügung P()(“Passeren”, Acquire, Up) V()(“Vrijgeven”, Release, Down)
5
Semaphore, Varianten Binäre Semaphore Hat nur zwei Zustände ( offen - zu, frei - besetzt, etc.) Counting ( General ) Semaphore Hat eine bestimmte, endliche Anzahl “Slots”, die via p() “besetzt” und mit v() “freigegeben” werden können.
6
Semaphore, Verhalten p(), aquire(), up() WENN kein “Slot” frei ist, DANN warte bis ein “Slot” frei ist markiere den “Slot” als besetzt und fahre fort v(), release(), down() markiere einen “Slot” als frei
7
1. SEMAPHORES 2. Semaphores in Java
8
Semaphore in Java import java.util.concurrent.Semaphore; // 2 Konstruktoren public Semaphore(int maxAvailable); //default: not fair public Semaphore(int maxAvailable, boolean fair); //Binary Semaphore: new Semaphore(1, fair); public void acquire(); public void acquire(int permits); public void release(); public void release(int permits); // und andere… Vorsicht : tryAcquire(…) ist immer unfair !
9
Semaphores, Beispiel public class Account { int balance = 0; Semaphore s = new Semaphore(1); public void deposit(int amount) { try { s.acquire(); } catch (InterruptedException e) { //handle interruption } balance += amount; s.release(); } Kein synchronized !
10
1. SEMAPHORES 3. Semaphores und Monitors
11
Semaphores = Monitor Semaphores sind äquivalent zu Monitors. Was genau bedeuted das ? Mit Monitors kann man Semaphores implementieren Mit Semaphores kann man Monitors implementieren
12
Umsetzung von Semaphores Eclipse ( give me a second …)
13
Semaphores und Fairness Fairness : Jeder Thread der acquire () aufgerufen hat, kann irgendwann fortfahren ( “eventually” ) Einfache Lösung : FIFO - Queue Performance nicht optimal
14
Semaphores anstelle von Monitors public class Buffer { Semaphore lock = new Semaphore(1); //init. free Semaphore cond = new Semaphore(0); //init. closed //… }
15
2. READER-WRITER-LOCK
16
Ein ReaderWriterLock Ähnliches Konstrukt wie Semaphore Beobachtung : Solange Threads nur lesen, können sie dies ruhig gleichzeitig tun. Idee : Lesen und Schreiben abwechselnd. Eine Anzahl Reader - Slots ( wie bei Semaphore ) Ein einziger Writer - Slot Entweder Reader - Slots besetzt, oder Writer - Slot besetzt
17
Verwendungsbeispiel class ConcurrentArray { ReaderWriterLock lock = new ReaderWriterLock(numReaders); int[] array; public int get(int i) { lock.acquireRead(); int r = array[i]; lock.releaseRead(); return r } public int set(int i, int v) { lock.acquireWrite(); array[i] = v; lock.release.Writer(); }
18
Bedingungen Effizient : Wenn Reader - Slots frei sind, sollten neue Reader zugelassen werden Liveness : Jeder Reader / Writer muss irgendwann an die Reihe kommen Fairness : Reader in Reader - Reihenfolge ; Writer in Writer - Reihenfolge Thread nur anhalten wenn unbedingt nötig
19
Wie Überprüfen? Thread 0 request read Thread 1 request read Thread 0 acquire read Thread 2 request read Thread 1 acquire read Thread 1 release read Thread 1 request write Thread 0 release read Thread 1 acquire write Thread 0 request read Thread 1 release write Thread 2 acquire read Thread 0 acquire read //etc. Nur lesen Nur scheiben Nur lesen
20
FRAGEN?
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.