![Page 1: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/1.jpg)
1
Aktuelle Themen zu Informatik der Systeme:
Nebenlaufige Programmierung:Praxis und Semantik
Programmierprimitiven (1)
PD Dr. David Sabel
WS 2013/14
Stand der Folien: 19. November 2013
![Page 2: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/2.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Bisher
Primitive atomare Operationen die durch Hardwareimplementiert sind
Losungen fur das Mutual Exclusion-Problem mit denverschiedenen Primitiven
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 2/77
![Page 3: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/3.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Jetzt
”Softwarelosungen“
Primitive, die durch nebenlaufige Programmiersprachen bereitgestellt werden
und: Anwendungen (klassische Probleme)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 3/77
![Page 4: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/4.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Einschub: Threads in Java
Leichtgewichte Threads nativ eingbaut (Klasse Thread)
Zwei Ansatze zum Erzeugen von Threads:
Unterklasse von Thread
Uber das Interface Runnable
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 4/77
![Page 5: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/5.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Unterklasse von Thread
Wesentliche Methode: run
Wird beim Thread-Start ausgefuhrt
Analog zur main-Methode in Java
Beispiel:
class Main {
static class EinThread extends Thread {
public void run() {
System.out.println("Hallo vom Thread " + this.getId());
}
}
public static void main(String args[]) {
for (int k = 1; k <= 10; k++) {
(new EinThread()).start();
}
}
}
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 5/77
![Page 6: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/6.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Interface Runnable
Methode run muss implementiert werden
Aber keine Unterklasse von Thread
stattdessen: Objekt dem Konstruktor von Thread ubergeben
class Main {
static class EinThread implements Runnable {
public void run() {
System.out.println("Hallo vom Thread " +
(Thread.currentThread()).getId());
}
}
public static void main(String args[]) {
for (int k = 1; k <= 10; k++) {
(new Thread(new EinThread())).start();
}
}
}
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 6/77
![Page 7: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/7.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Warten
Methode der Klasse Thread: sleep(Millisekunden)
Muss InterruptedException abfangen
class Main {
static class EinThread implements Runnable {
public void run() {
long myThreadId = (Thread.currentThread()).getId();
try { (Thread.currentThread()).sleep(myThreadId*100);}
catch (InterruptedException e) { };
System.out.println("Hallo vom Thread " + myThreadId);
}
}
public static void main(String args[]) {
for (int k = 1; k <= 10; k++) {
(new Thread(new EinThread())).start();
}
}
}
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 7/77
![Page 8: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/8.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prozessmodell (1)
Prozesse P haben einen Zustand P .state:
bereit(ready)
laufend(running)
laufend/running: Prozess fuhrt Schritte aus
bereit/ready: Prozess will Schritte ausfuhren, darf aber nicht
Mind. ein Prozess lauft immer (z.B. Leerlaufprozess)
Scheduler fuhrt Context-Switch aus: bereite Prozesse werdenzu laufenden, und umgekehrt
Fairness: Jeder bereite Prozess wird nach endlich vielenSchritten laufend
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 8/77
![Page 9: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/9.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prozessmodell (1)
Prozesse P haben einen Zustand P .state:
bereit(ready)
laufend(running)
laufend/running: Prozess fuhrt Schritte aus
bereit/ready: Prozess will Schritte ausfuhren, darf aber nicht
Mind. ein Prozess lauft immer (z.B. Leerlaufprozess)
Scheduler fuhrt Context-Switch aus: bereite Prozesse werdenzu laufenden, und umgekehrt
Fairness: Jeder bereite Prozess wird nach endlich vielenSchritten laufend
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 8/77
![Page 10: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/10.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prozessmodell (1)
Prozesse P haben einen Zustand P .state:
bereit(ready)
laufend(running)
laufend/running: Prozess fuhrt Schritte aus
bereit/ready: Prozess will Schritte ausfuhren, darf aber nicht
Mind. ein Prozess lauft immer (z.B. Leerlaufprozess)
Scheduler fuhrt Context-Switch aus: bereite Prozesse werdenzu laufenden, und umgekehrt
Fairness: Jeder bereite Prozess wird nach endlich vielenSchritten laufend
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 8/77
![Page 11: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/11.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prozessmodell (2)
Prozesse P haben einen Zustand P .state:
inaktiv(inactive)
bereit(ready)
laufend(running)
beendet(completed)
inaktiv: noch nicht bereit (z.B. Code wird geladen)
beendet/completed: Prozess terminiert
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 9/77
![Page 12: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/12.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prozessmodell (2)
Prozesse P haben einen Zustand P .state:
inaktiv(inactive)
bereit(ready)
laufend(running)
beendet(completed)
inaktiv: noch nicht bereit (z.B. Code wird geladen)
beendet/completed: Prozess terminiert
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 9/77
![Page 13: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/13.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prozessmodell (2)
Prozesse P haben einen Zustand P .state:
inaktiv(inactive)
bereit(ready)
laufend(running)
beendet(completed)
inaktiv: noch nicht bereit (z.B. Code wird geladen)
beendet/completed: Prozess terminiert
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 9/77
![Page 14: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/14.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prozessmodell (3)
Prozesse P haben einen Zustand P .state:
inaktiv(inactive)
bereit(ready)
blockiert(blocked)
laufend(running)
beendet(completed)
blockiert: Prozess darf keine Schritte ausfuhren
Blockieren / Entblockieren durch Programmbefehle,nicht durch Scheduler
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 10/77
![Page 15: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/15.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prozessmodell (3)
Prozesse P haben einen Zustand P .state:
inaktiv(inactive)
bereit(ready)
blockiert(blocked)
laufend(running)
beendet(completed)
blockiert: Prozess darf keine Schritte ausfuhren
Blockieren / Entblockieren durch Programmbefehle,nicht durch Scheduler
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 10/77
![Page 16: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/16.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prozessmodell (3)
Prozesse P haben einen Zustand P .state:
inaktiv(inactive)
bereit(ready)
blockiert(blocked)
laufend(running)
beendet(completed)
blockiert: Prozess darf keine Schritte ausfuhren
Blockieren / Entblockieren durch Programmbefehle,nicht durch Scheduler
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 10/77
![Page 17: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/17.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Semaphore
Begriffsherkunft:
Semaphor =Mechanischer Signalgeber im Bahnverkehr
In der Informatik:
Abstrakter Datentyp mit Operationen
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 11/77
![Page 18: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/18.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Semaphore
Begriffsherkunft:
Semaphor =Mechanischer Signalgeber im Bahnverkehr
In der Informatik:
Abstrakter Datentyp mit Operationen
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 11/77
![Page 19: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/19.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Semaphor S
Attribute (i.a.):
V = Nicht-negative Ganzzahl
M = Menge von Prozessen
Schreibweise fur Semaphor S: S.V und S.M
Operationen:
newSem(k): Erzeugt neuen Semaphor mit S.V = k undS.M = ∅wait(S) (alternativ: P(S) (Dijkstra, prolaag (Kunstwort,anstelle von verlaag (niederl. erniedrige) oder down(S))
signal(S) (alternativ: V(S) (Dijkstra, verhoog (niederl.erhohe)) oder up(S))
werden atomar ausgefuhrt
aus Sicht des Programmieres, d.h.
Programmiersprache sorgt fur”richtige“ Implementierung
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 12/77
![Page 20: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/20.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Semaphor S
Attribute (i.a.):
V = Nicht-negative Ganzzahl
M = Menge von Prozessen
Schreibweise fur Semaphor S: S.V und S.M
Operationen:
newSem(k): Erzeugt neuen Semaphor mit S.V = k undS.M = ∅wait(S) (alternativ: P(S) (Dijkstra, prolaag (Kunstwort,anstelle von verlaag (niederl. erniedrige) oder down(S))
signal(S) (alternativ: V(S) (Dijkstra, verhoog (niederl.erhohe)) oder up(S))
werden atomar ausgefuhrt
aus Sicht des Programmieres, d.h.
Programmiersprache sorgt fur”richtige“ Implementierung
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 12/77
![Page 21: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/21.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Semaphor: Wait von Prozess Q, wenn S.V = 0
S.V S.M
. . . Qlaufend
wait(S)
S.V S.M
. . .Qblockiert
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 13/77
![Page 22: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/22.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Semaphor: Wait von Prozess Q, wenn S.V = 0
S.V S.M
. . . Qlaufend
wait(S)
S.V S.M
. . .Qblockiert
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 13/77
![Page 23: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/23.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Semaphor: Wait von Prozess Q, wenn S.V > 0
. . .
k
S.V S.M
Qlaufend
wait(S)
. . .
k − 1
S.V S.M
Qlaufend
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 14/77
![Page 24: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/24.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Semaphor: Wait von Prozess Q, wenn S.V > 0
. . .
k
S.V S.M
Qlaufend
wait(S)
. . .
k − 1
S.V S.M
Qlaufend
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 14/77
![Page 25: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/25.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
wait(S)
Sei Q der aufrufende Prozess:
procedure wait(S)if S.V > 0 then
S.V := S.V − 1;else
S.M := S.M ∪ {Q};Q.state := blocked;
S.V?= 0
blockiere Qund
fuge Q in S.Mein
erniedrigeS.V um 1
Ja Nein
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 15/77
![Page 26: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/26.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Semaphor: Signal, wenn S.M 6= ∅
. . .
k
S.V S.M
P1blockiert
. . . Piblockiert
. . . Pnblockiert
signal(S)
. . .
k
S.V S.M
P1blockiert
. . . Pibereit
. . . Pnblockiert
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 16/77
![Page 27: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/27.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Semaphor: Signal, wenn S.M 6= ∅
. . .
k
S.V S.M
P1blockiert
. . . Piblockiert
. . . Pnblockiert
signal(S)
. . .
k
S.V S.M
P1blockiert
. . . Pibereit
. . . Pnblockiert
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 16/77
![Page 28: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/28.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Semaphor: Signal, wenn S.M = ∅
. . .
k
S.V S.M
signal(S)
. . .
k + 1
S.V S.M
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 17/77
![Page 29: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/29.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Semaphor: Signal, wenn S.M = ∅
. . .
k
S.V S.M
signal(S)
. . .
k + 1
S.V S.M
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 17/77
![Page 30: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/30.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
signal(S)
procedure signal(S)if S.M = ∅ then
S.V := S.V + 1;else
wahle ein Element Q aus S.M ;S.M := S.M \ {Q};Q.state := ready;
S.M?= ∅
erhoheS.V um 1
entblockiereein Q aus S.M
JaNein
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 18/77
![Page 31: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/31.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Invarianten
Nach Ausfuhrung jeder Auswertungsfolge P gilt fur ein mit kinitialisiertem Semaphor S
S.V ≥ 0
S.V = k + |S.M | + #signal(S,P) − #wait(S,P)
−1 +1+1 +1
+1 +1−1 +1
wait(S)
signal(S)
wobei
#signal(S,P) = Anzahl signal-Operationen in P
#wait(S,P) = Anzahl wait-Operationen in P
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 19/77
![Page 32: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/32.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Invarianten
Nach Ausfuhrung jeder Auswertungsfolge P gilt fur ein mit kinitialisiertem Semaphor S
S.V ≥ 0
S.V = k + |S.M | + #signal(S,P) − #wait(S,P)−1 +1
+1 +1
+1 +1−1 +1
wait(S)
signal(S)
wobei
#signal(S,P) = Anzahl signal-Operationen in P
#wait(S,P) = Anzahl wait-Operationen in P
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 19/77
![Page 33: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/33.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Invarianten
Nach Ausfuhrung jeder Auswertungsfolge P gilt fur ein mit kinitialisiertem Semaphor S
S.V ≥ 0
S.V = k + |S.M | + #signal(S,P) − #wait(S,P)−1 +1
+1 +1+1 +1
−1 +1
wait(S)
signal(S)
wobei
#signal(S,P) = Anzahl signal-Operationen in P
#wait(S,P) = Anzahl wait-Operationen in P
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 19/77
![Page 34: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/34.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Binare Semaphore
bisher: Generelle Semaphore
bei Binaren Semaphore: 0 ≤ S.V ≤ 1
wait unverandert
signal darf nicht beliebig erhohen:
procedure signal(S)if S.V = 1 then
undefinedelse if S.M = ∅ then
S.V := 1else
wahle ein Element Q aus S.M ;S.M := S.M \ {Q};Q.state := ready;
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 20/77
![Page 35: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/35.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Binare Semaphore (2)
werden in Programmiersprachen oft als mutex bezeichnet
Invarianten gelten weiterhin, wenn vor jedem signal einzugehoriges wait ausgefuhrt wird
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 21/77
![Page 36: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/36.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Zusammenfassend nochmal: Semaphor
Q ruft wait(S) auf
S.V?= 0
blockiere Qund
fuge Q in S.Mein
erniedrigeS.V um 1
Ja Nein
signal(S)
S.M?= ∅
erhoheS.V um 1
entblockiereein Q aus S.M
JaNein
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 22/77
![Page 37: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/37.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Zusammenfasend: Binarer Semaphor
V nur 0 oder 1
Q ruft wait(S) auf
S.V?= 0
blockiere Qund
fuge Q in S.Mein
erniedrigeS.V um 1
Ja Nein
signal(S)
S.M?= ∅
S.V?= 1
⊥erhoheS.V um 1
entblockiereein Q aus S.M
Ja
Nein Ja
Nein
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 23/77
![Page 38: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/38.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Mutual-Exclusion mit binarem Semaphor
Initial: S sei ein binarer Semaphor, initialisiert mit 1
Programm des i. Prozesses
loop forever
(P1) restlicher Code(P2) wait(S)(P3) Kritischer Abschnitt(P4) signal(S)end loop
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 24/77
![Page 39: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/39.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Korrektheit des Algorithmus
Theorem
Der Algorithmus garantiert wechelseitigen Ausschluss und istDeadlock-frei.
Beweis: Mutual-Exclusion
#KA(P) = Anzahl von Prozessen im KA, nach Ausfuhrung von P
#KA(P) = #wait(S,P)−#signal(S,P)− |S.M |
Mit Invariante S.V = k + |S.M |+#signal(S,P)−#wait(S,P)ergibt das
#KA(P) + S.V = #wait(S,P)−#signal(S,P)− |S.M |+ k + |S.M |+#signal(S,P)−#wait(S,P)
= k
Da k = 1 muss gelten: #KA(P) ≤ 1 (d.h. wechsels. Ausschluss)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 25/77
![Page 40: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/40.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Korrektheit des Algorithmus (2)
Theorem
Der Algorithmus garantiert wechelseitigen Ausschluss und istDeadlock-frei.
Beweis: Deadlock-Freiheit
P = unendlich lange Auswertungsfolge, so dass Deadlock aufritt
P1 = Prafix von P so dass ab P1:
Kein Prozess im KA, d.h. #KA(P1) = 0Mind. ein Prozess P wartet (ist blockiert), d.h. S.V = 0 undP ∈ S.M
Unmoglich, da #KA(P1) + S.V = 1
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 26/77
![Page 41: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/41.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Eigenschaften
Bei maximal 2 Prozessen: Algorithmus ist Starvation-frei.
Bei mehr Prozessen: nicht Starvation-frei:
S.V S.M Prozess 1 Prozess 2 Prozess 3
1 ∅ rest. Code rest. Code rest. Code
1 ∅ wait(S) rest. Code rest. Code0 ∅ Krit. Abschnitt wait(S) rest. Code0 {2} Krit. Abschnitt (blockiert) wait(S)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)0 {2, 3} signal(S) (blockiert) (blockiert)0 {3} rest. Code Krit. Abschnitt (blockiert)0 {1, 3} wait(S) Krit. Abschnitt (blockiert)0 {1, 3} (blockiert) signal(S) (blockiert)0 {3} Krit. Abschnitt rest. Code (blockiert)0 {3} Krit. Abschnitt wait(S) (blockiert)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 27/77
![Page 42: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/42.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Eigenschaften
Bei maximal 2 Prozessen: Algorithmus ist Starvation-frei.
Bei mehr Prozessen: nicht Starvation-frei:
S.V S.M Prozess 1 Prozess 2 Prozess 3
1 ∅ rest. Code rest. Code rest. Code1 ∅ wait(S) rest. Code rest. Code
0 ∅ Krit. Abschnitt wait(S) rest. Code0 {2} Krit. Abschnitt (blockiert) wait(S)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)0 {2, 3} signal(S) (blockiert) (blockiert)0 {3} rest. Code Krit. Abschnitt (blockiert)0 {1, 3} wait(S) Krit. Abschnitt (blockiert)0 {1, 3} (blockiert) signal(S) (blockiert)0 {3} Krit. Abschnitt rest. Code (blockiert)0 {3} Krit. Abschnitt wait(S) (blockiert)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 27/77
![Page 43: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/43.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Eigenschaften
Bei maximal 2 Prozessen: Algorithmus ist Starvation-frei.
Bei mehr Prozessen: nicht Starvation-frei:
S.V S.M Prozess 1 Prozess 2 Prozess 3
1 ∅ rest. Code rest. Code rest. Code1 ∅ wait(S) rest. Code rest. Code0 ∅ Krit. Abschnitt wait(S) rest. Code
0 {2} Krit. Abschnitt (blockiert) wait(S)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)0 {2, 3} signal(S) (blockiert) (blockiert)0 {3} rest. Code Krit. Abschnitt (blockiert)0 {1, 3} wait(S) Krit. Abschnitt (blockiert)0 {1, 3} (blockiert) signal(S) (blockiert)0 {3} Krit. Abschnitt rest. Code (blockiert)0 {3} Krit. Abschnitt wait(S) (blockiert)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 27/77
![Page 44: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/44.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Eigenschaften
Bei maximal 2 Prozessen: Algorithmus ist Starvation-frei.
Bei mehr Prozessen: nicht Starvation-frei:
S.V S.M Prozess 1 Prozess 2 Prozess 3
1 ∅ rest. Code rest. Code rest. Code1 ∅ wait(S) rest. Code rest. Code0 ∅ Krit. Abschnitt wait(S) rest. Code0 {2} Krit. Abschnitt (blockiert) wait(S)
0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)0 {2, 3} signal(S) (blockiert) (blockiert)0 {3} rest. Code Krit. Abschnitt (blockiert)0 {1, 3} wait(S) Krit. Abschnitt (blockiert)0 {1, 3} (blockiert) signal(S) (blockiert)0 {3} Krit. Abschnitt rest. Code (blockiert)0 {3} Krit. Abschnitt wait(S) (blockiert)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 27/77
![Page 45: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/45.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Eigenschaften
Bei maximal 2 Prozessen: Algorithmus ist Starvation-frei.
Bei mehr Prozessen: nicht Starvation-frei:
S.V S.M Prozess 1 Prozess 2 Prozess 3
1 ∅ rest. Code rest. Code rest. Code1 ∅ wait(S) rest. Code rest. Code0 ∅ Krit. Abschnitt wait(S) rest. Code0 {2} Krit. Abschnitt (blockiert) wait(S)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)
0 {2, 3} signal(S) (blockiert) (blockiert)0 {3} rest. Code Krit. Abschnitt (blockiert)0 {1, 3} wait(S) Krit. Abschnitt (blockiert)0 {1, 3} (blockiert) signal(S) (blockiert)0 {3} Krit. Abschnitt rest. Code (blockiert)0 {3} Krit. Abschnitt wait(S) (blockiert)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 27/77
![Page 46: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/46.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Eigenschaften
Bei maximal 2 Prozessen: Algorithmus ist Starvation-frei.
Bei mehr Prozessen: nicht Starvation-frei:
S.V S.M Prozess 1 Prozess 2 Prozess 3
1 ∅ rest. Code rest. Code rest. Code1 ∅ wait(S) rest. Code rest. Code0 ∅ Krit. Abschnitt wait(S) rest. Code0 {2} Krit. Abschnitt (blockiert) wait(S)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)0 {2, 3} signal(S) (blockiert) (blockiert)
0 {3} rest. Code Krit. Abschnitt (blockiert)0 {1, 3} wait(S) Krit. Abschnitt (blockiert)0 {1, 3} (blockiert) signal(S) (blockiert)0 {3} Krit. Abschnitt rest. Code (blockiert)0 {3} Krit. Abschnitt wait(S) (blockiert)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 27/77
![Page 47: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/47.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Eigenschaften
Bei maximal 2 Prozessen: Algorithmus ist Starvation-frei.
Bei mehr Prozessen: nicht Starvation-frei:
S.V S.M Prozess 1 Prozess 2 Prozess 3
1 ∅ rest. Code rest. Code rest. Code1 ∅ wait(S) rest. Code rest. Code0 ∅ Krit. Abschnitt wait(S) rest. Code0 {2} Krit. Abschnitt (blockiert) wait(S)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)0 {2, 3} signal(S) (blockiert) (blockiert)0 {3} rest. Code Krit. Abschnitt (blockiert)
0 {1, 3} wait(S) Krit. Abschnitt (blockiert)0 {1, 3} (blockiert) signal(S) (blockiert)0 {3} Krit. Abschnitt rest. Code (blockiert)0 {3} Krit. Abschnitt wait(S) (blockiert)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 27/77
![Page 48: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/48.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Eigenschaften
Bei maximal 2 Prozessen: Algorithmus ist Starvation-frei.
Bei mehr Prozessen: nicht Starvation-frei:
S.V S.M Prozess 1 Prozess 2 Prozess 3
1 ∅ rest. Code rest. Code rest. Code1 ∅ wait(S) rest. Code rest. Code0 ∅ Krit. Abschnitt wait(S) rest. Code0 {2} Krit. Abschnitt (blockiert) wait(S)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)0 {2, 3} signal(S) (blockiert) (blockiert)0 {3} rest. Code Krit. Abschnitt (blockiert)0 {1, 3} wait(S) Krit. Abschnitt (blockiert)
0 {1, 3} (blockiert) signal(S) (blockiert)0 {3} Krit. Abschnitt rest. Code (blockiert)0 {3} Krit. Abschnitt wait(S) (blockiert)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 27/77
![Page 49: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/49.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Eigenschaften
Bei maximal 2 Prozessen: Algorithmus ist Starvation-frei.
Bei mehr Prozessen: nicht Starvation-frei:
S.V S.M Prozess 1 Prozess 2 Prozess 3
1 ∅ rest. Code rest. Code rest. Code1 ∅ wait(S) rest. Code rest. Code0 ∅ Krit. Abschnitt wait(S) rest. Code0 {2} Krit. Abschnitt (blockiert) wait(S)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)0 {2, 3} signal(S) (blockiert) (blockiert)0 {3} rest. Code Krit. Abschnitt (blockiert)0 {1, 3} wait(S) Krit. Abschnitt (blockiert)0 {1, 3} (blockiert) signal(S) (blockiert)
0 {3} Krit. Abschnitt rest. Code (blockiert)0 {3} Krit. Abschnitt wait(S) (blockiert)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 27/77
![Page 50: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/50.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Eigenschaften
Bei maximal 2 Prozessen: Algorithmus ist Starvation-frei.
Bei mehr Prozessen: nicht Starvation-frei:
S.V S.M Prozess 1 Prozess 2 Prozess 3
1 ∅ rest. Code rest. Code rest. Code1 ∅ wait(S) rest. Code rest. Code0 ∅ Krit. Abschnitt wait(S) rest. Code0 {2} Krit. Abschnitt (blockiert) wait(S)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)0 {2, 3} signal(S) (blockiert) (blockiert)0 {3} rest. Code Krit. Abschnitt (blockiert)0 {1, 3} wait(S) Krit. Abschnitt (blockiert)0 {1, 3} (blockiert) signal(S) (blockiert)0 {3} Krit. Abschnitt rest. Code (blockiert)
0 {3} Krit. Abschnitt wait(S) (blockiert)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 27/77
![Page 51: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/51.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Eigenschaften
Bei maximal 2 Prozessen: Algorithmus ist Starvation-frei.
Bei mehr Prozessen: nicht Starvation-frei:
S.V S.M Prozess 1 Prozess 2 Prozess 3
1 ∅ rest. Code rest. Code rest. Code1 ∅ wait(S) rest. Code rest. Code0 ∅ Krit. Abschnitt wait(S) rest. Code0 {2} Krit. Abschnitt (blockiert) wait(S)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)0 {2, 3} signal(S) (blockiert) (blockiert)0 {3} rest. Code Krit. Abschnitt (blockiert)0 {1, 3} wait(S) Krit. Abschnitt (blockiert)0 {1, 3} (blockiert) signal(S) (blockiert)0 {3} Krit. Abschnitt rest. Code (blockiert)0 {3} Krit. Abschnitt wait(S) (blockiert)
0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 27/77
![Page 52: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/52.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Eigenschaften
Bei maximal 2 Prozessen: Algorithmus ist Starvation-frei.
Bei mehr Prozessen: nicht Starvation-frei:
S.V S.M Prozess 1 Prozess 2 Prozess 3
1 ∅ rest. Code rest. Code rest. Code1 ∅ wait(S) rest. Code rest. Code0 ∅ Krit. Abschnitt wait(S) rest. Code0 {2} Krit. Abschnitt (blockiert) wait(S)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)0 {2, 3} signal(S) (blockiert) (blockiert)0 {3} rest. Code Krit. Abschnitt (blockiert)0 {1, 3} wait(S) Krit. Abschnitt (blockiert)0 {1, 3} (blockiert) signal(S) (blockiert)0 {3} Krit. Abschnitt rest. Code (blockiert)0 {3} Krit. Abschnitt wait(S) (blockiert)0 {2, 3} Krit. Abschnitt (blockiert) (blockiert)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 27/77
![Page 53: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/53.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Arten von Semaphore
Bisherige Semaphore: schwache Semaphore, da Auswahl deszu entblockierenden Prozesses beliebig.
Starke Semaphore: FIFO-Reihenfolge
Queue / Liste S.L statt Menge S.M
procedure wait(S)if S.V > 0 then
S.V := S.V − 1;else
S.L := append(S.L, P );P.state := blocked;
procedure signal(S)if isEmpty(S.L) then
S.V := S.V + 1;else
Q := head(S.L);S.L := tail(S.L);Q.state := ready;
Mit starkem Semaphor: Algorithmus ist Starvation-frei &erfullt FIFO-Eigenschaft
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 28/77
![Page 54: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/54.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Weitere Arten von Semaphore (2)
Unfaire bzw. Busy-Wait Semaphore
gar keine Eigenschaft, wann ein Prozess entblockiert wird
blockiert = busy-waiting
Keine S.M Komponente, nur S.V
procedure wait(S)await S.V > 0;S.V := S.V − 1;
procedure signal(S)S.V := S.V + 1;
Algorithmus selbst bei 2 Prozessen nicht Starvation-frei.
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 29/77
![Page 55: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/55.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Semaphore in Java
Im Package java.util.concurrent ist die KlasseSemaphore definiert.
Konstruktor Semaphore(i) initialisiert den Semaphor mitWert i
Negatives i erlaubt
wait heißt acquire
signal heißt release
Exceptions konnen auftreten und mussen abgefangen werden(bei acquire Interrupted Exception)
zweiter Konstruktor Semaphore(i,fair)
i = initialer Wertfair = Boolescher Wert. Wenn falsch, dann busy-waitSemaphor, sonst starker Semaphor
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 30/77
![Page 56: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/56.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel aus Ben-Ari Buch
import java.util.concurrent.Semaphore;
class CountSem extends Thread {
static volatile int n = 0; // globale atomare Variable
static Semaphore s = new Semaphore(1);
public void run() {
int temp;
for (int i = 0; i < 10; i++) {
try {
s.acquire();
}
catch (InterruptedException e) {}
temp = n;
n = temp + 1;
s.release();
}
}
...
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 31/77
![Page 57: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/57.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel aus Ben-Ari Buch (2)
...
public static void main(String[] args) {
CountSem p = new CountSem();
CountSem q = new CountSem();
p.start(); // startet Thread p
q.start(); // startet Thread q
try {
p.join();// wartet auf Terminierung von Thread p
q.join();// wartet auf Terminierung von Thread q
}
catch (InterruptedException e) { }
System.out.println("The value of n is " + n);
}
}
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 32/77
![Page 58: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/58.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Im Folgenden:
Anwendungsbeispiele,Problemlosungen mit Semaphore
Koordination - Beispiel: Merge-SortErzeuger / Verbraucher: Infinite / bounded Buffer
Speisende PhilosophenThe Sleeping Barber
Cigarette Smoker’s ProblemReader & Writers
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 33/77
![Page 59: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/59.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Mergesort: Koordination der Reihenfolge
Parallelisierung von Mergesort:
Teile Eingabe in 2 Halften
Sortiere beide Halften (rekursiv) nebenlaufig
Mische anschließend das Ergebnis
Problem: Mische erst nachdem die beiden Halften fertig sortiertsind.
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 34/77
![Page 60: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/60.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Mergesort mit binaren Semaphore
Initial: left, right: Binarer Semaphore mit 0 initialisiert
merge-Prozess:(1) wait(left);(2) wait(right);(3) merge
Prozess fur linke Halfte(1) sortiere linke Halfte;(2) signal(left);
Prozess fur rechte Halfte(1) sortiere rechte Halfte;(2) signal(right);
Achtung: 2 Semaphore pro Rekursionsschritt!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 35/77
![Page 61: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/61.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Erzeuger / Verbraucher
Erzeuger: Produziert Daten
Verbraucher: Konsumiert Daten
Beispiel: Tastatur / Betriebssystem usw.
Austausch uber Puffer:
Queue / Liste
Erzeuger schreibt hinten auf die Liste
Verbraucher konsumiert vorne von der Liste
2 Varianten: unendlich lange Liste (infinite buffer) /begrenzter Platz (bounded buffer)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 36/77
![Page 62: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/62.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Erzeuger / Verbraucher mit infinite Buffer
Anforderungen:
Lesen / Schreiben auf den Puffer sicher (atomar)
Verbraucher braucht Schutz fur den Fall, dass der Puffer leerist
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 37/77
![Page 63: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/63.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Erzeuger / Verbraucher mit infinite Buffer (2)
Initial: notEmpty: Genereller Semaphor, initialisiert mit 0mutex: Binarer Semaphor, initialisiert mit 1l: Liste
Erzeuger (erzeugt e)(1) erzeuge e;(2) wait(mutex);(3) l := append(l,e);(4) signal(notEmpty);(5) signal(mutex);
Verbraucher (verbraucht e)(1) wait(notEmpty);(2) wait(mutex);(3) e := head(l);(4) l := tail(l);(5) signal(mutex);(6) verbrauche e;
Liste am Anfang leer =⇒ Invariante: notEmpty.V = length(l)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 38/77
![Page 64: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/64.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Infinite Buffer mit Semaphore in Java
import java.util.concurrent.Semaphore;
import java.util.LinkedList;
import java.util.Random;
class InfBuffer<V> {
Semaphore notEmpty = new Semaphore(0);
Semaphore mutex = new Semaphore(1);
LinkedList<V> buffer = new LinkedList<V>();
public void produce(V elem) {
try {mutex.acquire();} catch (InterruptedException e) {};
buffer.add(elem);
notEmpty.release();
printBuf(); // Ausgabe zum Debuggen
mutex.release();
}
public V consume() {
try {notEmpty.acquire();} catch (InterruptedException e) {};
try {mutex.acquire();} catch (InterruptedException e) {};
V e = buffer.removeFirst();
printBuf(); // Ausgabe zum Debuggen
mutex.release();
return e;
}
}D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 39/77
![Page 65: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/65.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Infinite Buffer mit Semaphore in Java (2)
class Producer extends Thread {
static Random generator = new Random();
InfBuffer<Integer> buff;
Integer number;
Producer(InfBuffer<Integer> b, Integer i) {
buff = b;
number = i;
}
public void run() {
for (int i = 1; i <= 10; i++) {
try {(Thread.currentThread()).sleep(Math.abs(generator.nextInt()%1000));}
catch (InterruptedException e) { };
buff.produce(i);
PrintSem.print("Producer " + number + ": " + i + " produziert");
}
}
}
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 40/77
![Page 66: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/66.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Infinite Buffer mit Semaphore in Java (3)
class Consumer extends Thread {
static Random generator = new Random();
InfBuffer<Integer> buff;
Integer number;
Consumer(InfBuffer<Integer> b,Integer i) {
buff = b;
number = i;
}
public void run() {
for (int i = 1; i <= 50; i++) {
try {Thread.currentThread().sleep(Math.abs(generator.nextInt()%1000));}
catch (InterruptedException e) { };
Integer e = buff.consume();
PrintSem.print("Consumer " + number + ": " + e + " konsumiert");
}
}
}
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 41/77
![Page 67: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/67.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Infinite Buffer mit Semaphore in Java (4)
final class PrintSem {
static Semaphore mutex = new Semaphore(1);
static void print(String str) {
try {mutex.acquire();} catch (InterruptedException e) {};
System.out.println(str);
mutex.release();
}
}
class Main {
public static void main(String[] args) {
InfBuffer<Integer> b = new InfBuffer<Integer>();
for (int i=1; i <= 50; i++) {
Producer q = new Producer(b,i);
q.start();
}
for (int i=1; i <= 10; i++) {
Consumer q = new Consumer(b,i);
q.start();
}
while (true) {} // Endlosschleife
}
}
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 42/77
![Page 68: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/68.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Erzeuger / Verbraucher mit bounded Buffer
Anforderungen:
Lesen / Schreiben auf den Puffer sicher (atomar)
Verbraucher braucht Schutz fur den Fall, dass der Puffer leerist
Erzeuger braucht Schutz fur den Fall, dass der Puffer voll ist
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 43/77
![Page 69: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/69.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Erzeuger / Verbraucher mit bounded Buffer (2)
Initial: notEmpty: Genereller Semaphor, initialisiert mit 0notFull: Genereller Semaphor, initialisiert mit Nmutex: Binarer Semaphor, initialisiert mit 1l: Liste
Erzeuger (erzeugt e)(1) erzeuge e;(2) wait(notFull);(3) wait(mutex);(4) l := append(l,e);(5) signal(notEmpty);(6) signal(mutex);
Verbraucher (verbraucht e)(1) wait(notEmpty);(2) wait(mutex);(3) e := head(l);(4) l := tail(l);(5) signal(notFull);(6) signal(mutex);(7) verbrauche e;
Invariante: notEmpty.V + notFull.V = N
”(notEmpty,notFull) = Split-Semaphor“
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 44/77
![Page 70: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/70.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Speisende Philosophen
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 45/77
![Page 71: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/71.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Speisende Philosophen (2)
Situation
Philosoph denkt oder isst Spaghetti, abwechselnd
Philosoph braucht beide Gabeln zum Essen
Philosoph nimmt Gabeln nacheinander
Anforderungen:
Kein Deadlock: Irgendein Philosoph kann nach endlicher Zeitimmer essen
Kein Verhungern: Jeder Philosoph isst nach endlicher Zeit
Modellierung:
Philosophen durchnummeriert i ∈ {1, . . . , N}Gabel = Binarer Semaphor
linke Gabel: gabel[i], rechte Gabel: gabel[i+1] (modulo N)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 46/77
![Page 72: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/72.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Speisende Philosophen (2)
Situation
Philosoph denkt oder isst Spaghetti, abwechselnd
Philosoph braucht beide Gabeln zum Essen
Philosoph nimmt Gabeln nacheinander
Anforderungen:
Kein Deadlock: Irgendein Philosoph kann nach endlicher Zeitimmer essen
Kein Verhungern: Jeder Philosoph isst nach endlicher Zeit
Modellierung:
Philosophen durchnummeriert i ∈ {1, . . . , N}Gabel = Binarer Semaphor
linke Gabel: gabel[i], rechte Gabel: gabel[i+1] (modulo N)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 46/77
![Page 73: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/73.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Speisende Philosophen (2)
Situation
Philosoph denkt oder isst Spaghetti, abwechselnd
Philosoph braucht beide Gabeln zum Essen
Philosoph nimmt Gabeln nacheinander
Anforderungen:
Kein Deadlock: Irgendein Philosoph kann nach endlicher Zeitimmer essen
Kein Verhungern: Jeder Philosoph isst nach endlicher Zeit
Modellierung:
Philosophen durchnummeriert i ∈ {1, . . . , N}Gabel = Binarer Semaphor
linke Gabel: gabel[i], rechte Gabel: gabel[i+1] (modulo N)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 46/77
![Page 74: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/74.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Philosophen: Versuch 1
Initial alle Gabeln mit 1 initialisiert
Philosoph iloop forever
(1) Philosoph denkt;(2) wait(gabel[i]); // linke Gabel(3) wait(gabel[i+1]);// rechte Gabel(4) Philosoph isst(5) signal(gabel[i+ 1]);(6) signal(gabel[i]);end loop
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 47/77
![Page 75: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/75.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
Philosoph 1 Philosoph 2 Philosoph 3
wait(gabeln[1])
”hat linke Gabel“ wait(gabeln[2])
”hat linke Gabel“ wait(gabeln[3])
”hat linke Gabel“
wait(gabeln[2])blockiert wait(gabeln[3])
blockiert wait(gabeln[1])blockiert
Deadlock moglich: Alle haben die linke Gabel, keiner die rechte!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 48/77
![Page 76: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/76.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
Philosoph 1 Philosoph 2 Philosoph 3
wait(gabeln[1])
”hat linke Gabel“ wait(gabeln[2])
”hat linke Gabel“ wait(gabeln[3])
”hat linke Gabel“
wait(gabeln[2])blockiert wait(gabeln[3])
blockiert wait(gabeln[1])blockiert
Deadlock moglich: Alle haben die linke Gabel, keiner die rechte!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 48/77
![Page 77: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/77.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
Philosoph 1 Philosoph 2 Philosoph 3
wait(gabeln[1])
”hat linke Gabel“ wait(gabeln[2])
”hat linke Gabel“ wait(gabeln[3])
”hat linke Gabel“
wait(gabeln[2])blockiert wait(gabeln[3])
blockiert wait(gabeln[1])blockiert
Deadlock moglich: Alle haben die linke Gabel, keiner die rechte!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 48/77
![Page 78: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/78.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
Philosoph 1 Philosoph 2 Philosoph 3
wait(gabeln[1])
”hat linke Gabel“ wait(gabeln[2])
”hat linke Gabel“ wait(gabeln[3])
”hat linke Gabel“
wait(gabeln[2])blockiert wait(gabeln[3])
blockiert wait(gabeln[1])blockiert
Deadlock moglich: Alle haben die linke Gabel, keiner die rechte!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 48/77
![Page 79: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/79.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
Philosoph 1 Philosoph 2 Philosoph 3
wait(gabeln[1])
”hat linke Gabel“ wait(gabeln[2])
”hat linke Gabel“ wait(gabeln[3])
”hat linke Gabel“
wait(gabeln[2])blockiert wait(gabeln[3])
blockiert wait(gabeln[1])blockiert
Deadlock moglich: Alle haben die linke Gabel, keiner die rechte!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 48/77
![Page 80: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/80.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
Philosoph 1 Philosoph 2 Philosoph 3
wait(gabeln[1])
”hat linke Gabel“ wait(gabeln[2])
”hat linke Gabel“ wait(gabeln[3])
”hat linke Gabel“
wait(gabeln[2])
blockiert wait(gabeln[3])blockiert wait(gabeln[1])
blockiert
Deadlock moglich: Alle haben die linke Gabel, keiner die rechte!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 48/77
![Page 81: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/81.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
Philosoph 1 Philosoph 2 Philosoph 3
wait(gabeln[1])
”hat linke Gabel“ wait(gabeln[2])
”hat linke Gabel“ wait(gabeln[3])
”hat linke Gabel“
wait(gabeln[2])blockiert wait(gabeln[3])
blockiert wait(gabeln[1])blockiert
Deadlock moglich: Alle haben die linke Gabel, keiner die rechte!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 48/77
![Page 82: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/82.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
Philosoph 1 Philosoph 2 Philosoph 3
wait(gabeln[1])
”hat linke Gabel“ wait(gabeln[2])
”hat linke Gabel“ wait(gabeln[3])
”hat linke Gabel“
wait(gabeln[2])blockiert wait(gabeln[3])
blockiert wait(gabeln[1])
blockiert
Deadlock moglich: Alle haben die linke Gabel, keiner die rechte!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 48/77
![Page 83: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/83.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
Philosoph 1 Philosoph 2 Philosoph 3
wait(gabeln[1])
”hat linke Gabel“ wait(gabeln[2])
”hat linke Gabel“ wait(gabeln[3])
”hat linke Gabel“
wait(gabeln[2])blockiert wait(gabeln[3])
blockiert wait(gabeln[1])blockiert
Deadlock moglich: Alle haben die linke Gabel, keiner die rechte!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 48/77
![Page 84: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/84.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Philosophen: Versuch 2
Initial alle Gabeln mit 1 initialisiertmutex: Binarer Semaphor, mit 1 initialisiert
Philosoph iloop forever
(1) Philosoph denkt;(2) wait(mutex);(3) wait(gabel[i]); // linke Gabel(4) wait(gabel[i+1]);// rechte Gabel(5) Philosoph isst(6) signal(gabel[i+1]);(7) signal(gabel[i]);(8) signal(mutex);end loop
Deadlock-frei, aber Starvation moglich: Ein Philosoph wird immerwieder uberholt. Zudem schlecht: Nur ein Philosoph isst gleichzeitig
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 49/77
![Page 85: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/85.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Philosophen: Versuch 2
Initial alle Gabeln mit 1 initialisiertmutex: Binarer Semaphor, mit 1 initialisiert
Philosoph iloop forever
(1) Philosoph denkt;(2) wait(mutex);(3) wait(gabel[i]); // linke Gabel(4) wait(gabel[i+1]);// rechte Gabel(5) Philosoph isst(6) signal(gabel[i+1]);(7) signal(gabel[i]);(8) signal(mutex);end loop
Deadlock-frei, aber Starvation moglich: Ein Philosoph wird immerwieder uberholt. Zudem schlecht: Nur ein Philosoph isst gleichzeitig
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 49/77
![Page 86: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/86.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Philosophen: Versuch 3
Initial alle Gabeln mit 1 initialisiertraum: genereller Semaphor, mit N − 1 initialisiert
Philosoph iloop forever
(1) Philosoph denkt;(2) wait(raum);(3) wait(gabel[i]); // linke Gabel(4) wait(gabel[i+1]);// rechte Gabel(5) Philosoph isst(6) signal(gabel[i+1]);(7) signal(gabel[i]);(8) signal(raum);end loop
raum lasst immer nur maximal N − 1 Philosophen gleichzeitig andie Gabeln
Deadlock und Starvation-frei
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 50/77
![Page 87: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/87.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Philosophen: Versuch 3
Initial alle Gabeln mit 1 initialisiertraum: genereller Semaphor, mit N − 1 initialisiert
Philosoph iloop forever
(1) Philosoph denkt;(2) wait(raum);(3) wait(gabel[i]); // linke Gabel(4) wait(gabel[i+1]);// rechte Gabel(5) Philosoph isst(6) signal(gabel[i+1]);(7) signal(gabel[i]);(8) signal(raum);end loop
raum lasst immer nur maximal N − 1 Philosophen gleichzeitig andie Gabeln
Deadlock und Starvation-freiD. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 50/77
![Page 88: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/88.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Philosophen: Versuch 4
Initial alle Gabeln mit 1 initialisiert
Philosoph i, i < Nloop forever
(1) Philosoph denkt;(2) wait(gabel[i]); // linke Gabel
(3) wait(gabel[i+1]);// rechte Gabel
(4) Philosoph isst(5) signal(gabel[i]+1);(6) signal(gabel[i]);end loop
Philosoph Nloop forever
(1) Philosoph denkt;(2) wait(gabel[i+1]); // rechte Gabel
(3) wait(gabel[i]);// linke Gabel
(4) Philosoph isst(5) signal(gabel[i]);(6) signal(gabel[i+1]);end loop
Deadlock und Starvation-frei
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 51/77
![Page 89: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/89.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Philosophen: Versuch 4
Initial alle Gabeln mit 1 initialisiert
Philosoph i, i < Nloop forever
(1) Philosoph denkt;(2) wait(gabel[i]); // linke Gabel
(3) wait(gabel[i+1]);// rechte Gabel
(4) Philosoph isst(5) signal(gabel[i]+1);(6) signal(gabel[i]);end loop
Philosoph Nloop forever
(1) Philosoph denkt;(2) wait(gabel[i+1]); // rechte Gabel
(3) wait(gabel[i]);// linke Gabel
(4) Philosoph isst(5) signal(gabel[i]);(6) signal(gabel[i+1]);end loop
Deadlock und Starvation-frei
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 51/77
![Page 90: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/90.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
The Sleeping Barber
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 52/77
![Page 91: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/91.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
The Sleeping Barber
Situation:
Friseur mit N − 1 Warteplatzen und ein Frisierplatz
Wenn Kunde da, wird er frisiert
Wenn keine Kunde da ist, dann schlaft Friseur, nachsterKunde weckt ihn
Wenn Frisierplatz belegt, dann setzt sich Kunde aufWarteplatz
Wenn alle Warteplatze belegt, dann geht Kunde sofort wieder.
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 53/77
![Page 92: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/92.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Losung zum Sleeping Barber Problem
Initial: wartend: atomares Register, am Anfang 0kunden: genereller Semaphor, am Anfang 0mutex: binarer Semaphor, am Anfang 1synch,friseur: binarer Semaphor am Anfang 0
Friseurloop forever
schlafe, solange keine Kunden:(1) wait(kunden);(2) wait(mutex);(3) wartend := wartend -1;nehme nachsten Kunden:(4) signal(friseur);(5) signal(mutex);(6) schneide Haare;warte, bis Kunde Laden verlasst:(7) wait(synch);end loop
Kunde(1) wait(mutex);(2) if wartend < N then
(3) wartend := wartend + 1;Wecke Friseur (bzw. erhohe Kunden):(4) signal(kunden);(5) signal(mutex);Warte bis Friseur bereit:(6) wait(friseur);(7) erhalte Frisur;verlasse Laden:(8) signal(synch);gehe sofort(9) else signal(mutex);
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 54/77
![Page 93: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/93.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Cigarette Smoker’s Problem
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 55/77
![Page 94: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/94.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Cigarette Smoker’s Problem (2)
Problem-Beschreibung:
4 Personen: 3 Raucher, 1 Agent
Zum Rauchen einer Zigarette werden benotigt: Tabak, Papier,Streichholzer
Die Raucher haben jeweils nur eine der Zutaten (unendlichviel davon)
Der Agent hat alle drei
Der Agent legt 2 der 3 Zutaten auf den Tisch
Der Raucher der die dritte Zutat hat nimmt die zwei weiterenund raucht.
Problem: Synchronisiere Raucher und Agenten
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 56/77
![Page 95: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/95.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Cigarette Smoker’s Problem (3)
Modellierung durch 4 binare Semaphore fur den Agenten
S[1] (Tabak), S[2] (Papier), S[3] (Streichholz): gibt an, obZutat auf dem Tisch liegt (initial 0)
agent gibt an ob der Agent Zutaten legt, oder warten muss(initial 1)
Programm des Agenten schon gegeben:loop forever
(1) wahle i und j zufallig aus {1, 2, 3};(2) wait(agent);(3) signal(S[i]);(4) signal(S[j]);
end loop
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 57/77
![Page 96: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/96.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Cigarette Smoker’s Problem: Versuch 1
Raucher mit Tabakloop forever
(1) wait(S[2]);(2) wait(S[3]);(3) “rauche”;(4) signal(agent);
end loop
Raucher mit Papier
loop forever
(1) wait(S[1]);(2) wait(S[3]);(3) “rauche”;(4) signal(agent);
end loop
Raucher mit Streichholzloop forever
(1) wait(S[1]);(2) wait(S[2]);(3) “rauche”;(4) signal(agent);
end loop
Agent: Tabak und Papier (signal(S[1]) + signal(S[2]))
S[1].V S[2].V S[3].V0 0 0
DEADLOCK!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 58/77
![Page 97: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/97.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Cigarette Smoker’s Problem: Versuch 1
Raucher mit Tabakloop forever
(1) wait(S[2]);(2) wait(S[3]);(3) “rauche”;(4) signal(agent);
end loop
Raucher mit Papier
loop forever
(1) wait(S[1]);(2) wait(S[3]);(3) “rauche”;(4) signal(agent);
end loop
Raucher mit Streichholzloop forever
(1) wait(S[1]);(2) wait(S[2]);(3) “rauche”;(4) signal(agent);
end loop
Agent: Tabak und Papier (signal(S[1]) + signal(S[2]))
S[1].V S[2].V S[3].V1 1 0
DEADLOCK!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 58/77
![Page 98: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/98.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Cigarette Smoker’s Problem: Versuch 1
Raucher mit Tabakloop forever
(1) wait(S[2]);(2) wait(S[3]);(3) “rauche”;(4) signal(agent);
end loop
Raucher mit Papier
loop forever
(1) wait(S[1]);(2) wait(S[3]);(3) “rauche”;(4) signal(agent);
end loop
Raucher mit Streichholzloop forever
(1) wait(S[1]);(2) wait(S[2]);(3) “rauche”;(4) signal(agent);
end loop
Agent: Tabak und Papier (signal(S[1]) + signal(S[2]))
S[1].V S[2].V S[3].V0 1 0
DEADLOCK!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 58/77
![Page 99: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/99.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Cigarette Smoker’s Problem: Versuch 1
Raucher mit Tabakloop forever
(1) wait(S[2]);(2) wait(S[3]);(3) “rauche”;(4) signal(agent);
end loop
Raucher mit Papier
loop forever
(1) wait(S[1]);(2) wait(S[3]);(3) “rauche”;(4) signal(agent);
end loop
Raucher mit Streichholzloop forever
(1) wait(S[1]);(2) wait(S[2]);(3) “rauche”;(4) signal(agent);
end loop
Agent: Tabak und Papier (signal(S[1]) + signal(S[2]))
S[1].V S[2].V S[3].V0 0 0
DEADLOCK!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 58/77
![Page 100: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/100.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Cigarette Smoker’s Problem: Versuch 1
Raucher mit Tabakloop forever
(1) wait(S[2]);(2) wait(S[3]);(3) “rauche”;(4) signal(agent);
end loop
Raucher mit Papier
loop forever
(1) wait(S[1]);(2) wait(S[3]);(3) “rauche”;(4) signal(agent);
end loop
Raucher mit Streichholzloop forever
(1) wait(S[1]);(2) wait(S[2]);(3) “rauche”;(4) signal(agent);
end loop
Agent: Tabak und Papier (signal(S[1]) + signal(S[2]))
S[1].V S[2].V S[3].V0 0 0
DEADLOCK!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 58/77
![Page 101: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/101.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Cigarette Smoker’s Problem: Versuch 2NEU: R[i], i = 1,...6, bin. Sem. (inital 0),
mutex: bin. Sem. (initial 1),t: atom. Register (initial 0)
Helfer (Tabak)
loop forever
(1) wait(S[1]);(2) wait(mutex);(3) t := t+1;(4) if t 6= 1 then
(5) signal(R[t]);(4) signal(mutex);
end loop
Helfer (Papier)
loop forever
(1) wait(S[2]);(2) wait(mutex);(3) t := t+2;(4) if t 6= 2 then
(5) signal(R[t]);(4) signal(mutex);
end loop
Helfer (Streichholz)
loop forever
(1) wait(S[3]);(2) wait(mutex);(3) t := t+4;(4) if t 6= 4 then
(5) signal(R[t]);(4) signal(mutex);
end loop
Raucher mit Tabakloop forever
(1) wait(R[6]);(2) t := 0;(3) “rauche”;(4) signal(agent);
end loop
Raucher mit Papier
loop forever
(1) wait(R[5]);(2) t := 0;(3) “rauche”;(4) signal(agent);
end loop
Raucher mit Streichholzloop forever
(1) wait(R[3]);(2) t := 0;(3) “rauche”;(4) signal(agent);
end loop
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 59/77
![Page 102: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/102.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Der richtige Raucher wird geweckt ...
Zutaten erster zweiter Wert geweckterauf dem Tisch Helfer (=weckender) von t Raucher
Helfer
Tabak & Papier (Tabak) (Papier) 1+2 = 3 R[3] (=Streichh.)Tabak & Papier (Papier) (Tabak) 2+1 = 3 R[3] (=Streichh.)
Tabak & Streichh. (Tabak) (Streichh.) 1+4 = 5 R[5] (=Papier)Tabak & Streichh. (Streichh.) (Tabak) 4+1 = 5 R[5] (=Papier)Papier & Streichh. (Papier) (Streichh.) 2+4 = 6 R[6] (=Tabak)Papier & Streichh. (Streichh.) (Papier) 4+2 = 6 R[6] (=Tabak)
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 60/77
![Page 103: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/103.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Barrieren
Manche Algorithmen erfordern “Phasen”
D.h.: Die Prozesse fuhren Berechnungen durch, aber an einemSchritt warten alle Prozesse aufeinander
Erst wenn alle an dieser Stelle angekommen sind, durfen dieProzesse weiter rechnen
Ahnlich war es beim Mergesort-Beispiel, dort wartet allerdingsnur ein Prozess auf zwei weitere
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 61/77
![Page 104: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/104.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Anwendungsbeispiel: Game of Life
Spielfeld von Conways Game of Life: N ×N -Matrix
unbewohnt
bewohnt
Ziel: Berechne immern die nachste Generation aus der aktuellen
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 62/77
![Page 105: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/105.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Spielregeln
– Feld unbewohnt: Wieder bewohnt genau dann, wenn #(Nachbarn) = 3, z.B.
⇒
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 63/77
![Page 106: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/106.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Spielregeln
– Feld bewohnt:– Wenn #(Nachbarn) < 2, dann unbewohnt (Unterpopulation), z.B.
⇒
– Wenn #(Nachbarn) ∈ {2, 3}, dann weiterhin bewohnt. Z.B.
⇒
– Wenn #(Nachbarn) > 3, dann unbewohnt danach (Uberpopulation), z.B.
⇒
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 64/77
![Page 107: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/107.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 108: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/108.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 109: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/109.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 110: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/110.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 111: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/111.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 112: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/112.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 113: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/113.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 114: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/114.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 115: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/115.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 116: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/116.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 117: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/117.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 118: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/118.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 119: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/119.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 120: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/120.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Beispiel
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 65/77
![Page 121: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/121.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Implementierung: Sequentiell
Annahmen:
Spielfeld in N ×N -Array mit Booleschen Eintragen
naechsterWert(i, j, array): berechne den nachsten Wert furEintrag (i,j): Lese alle Nachbarn und (i,j)-Eintrag, entscheidedann True oder False
updateArray(array,i,j,v) schreibt v in (i,j)-Zelle
k.Generation berechnen
array: Initialisiertes N ×N Array, dass das Spielfeld darstellt
Algorithmus:
for g:=1 to k do
for i=1 to N do
for j=1 to N do
v := naechsterWert(i,j,array);updateArray(array,i,j,v);
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 66/77
![Page 122: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/122.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Parallele Implementierung
Ein Prozess pro Feld (i,j), berechnet den Eintag fur das Feld
Paraller Algorithmus
array: Initialisiertes N ×N Array, dass das Spielfeld darstellt(N ×N) Prozesse: jeweils einen pro Spielfeld
Programm fur Prozess (i,j):
for g:=1 to kv := naechsterWert(i,j,array);updateArray(array,i,j,v);
Funktioniert nicht!
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 67/77
![Page 123: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/123.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Parallele Implementierung: Richtig
Paraller Algorithmus
array: Initialisiertes N ×N Array, dass das Spielfeld darstellt
barrier: Barriere fur N ×N Prozesse
(N ×N) Prozesse: jeweils einen pro Spielfeld
Programm fur Prozess (i,j):
for g:=1 to kv := naechsterWert(i,j,array);Warte bis alle Prozesse v berechnet habenupdateArray(array,i,j,v);Warte bis alle Prozesse ihr update geschrieben haben
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 68/77
![Page 124: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/124.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Parallele Implementierung: Richtig
Paraller Algorithmus
array: Initialisiertes N ×N Array, dass das Spielfeld darstelltbarrier: Barriere fur N ×N Prozesse(N ×N) Prozesse: jeweils einen pro Spielfeld
Programm fur Prozess (i,j):
for g:=1 to kv := naechsterWert(i,j,array);synchBarrier(barrier);updateArray(array,i,j,v);synchBarrier(barrier);
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 68/77
![Page 125: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/125.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Allgemeines Schema
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 69/77
![Page 126: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/126.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Barrier fur 2 Prozesse
Initial: p1ready, p2ready: binare Semaphore am Anfang 0
Programm fur Prozess 1:
(1) Berechnung vor dem Barrier;(2) signal(p1ready);(3) wait(p2ready);(4) Berechnung nach dem Barrier;
Programm fur Prozess 2:
(1) Berechnung vor dem Barrier;(2) signal(p2ready);(3) wait(p1ready);(4) Berechnung nach dem Barrier;
p1ready.V p1ready.M p2ready.V p2ready.M0 ∅ 0 ∅
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 70/77
![Page 127: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/127.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Barrier fur 2 Prozesse
Initial: p1ready, p2ready: binare Semaphore am Anfang 0
Programm fur Prozess 1:
(1) Berechnung vor dem Barrier;(2) signal(p1ready);(3) wait(p2ready);(4) Berechnung nach dem Barrier;
Programm fur Prozess 2:
(1) Berechnung vor dem Barrier;(2) signal(p2ready);(3) wait(p1ready);(4) Berechnung nach dem Barrier;
p1ready.V p1ready.M p2ready.V p2ready.M0 ∅ 0 ∅
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 70/77
![Page 128: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/128.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Barrier fur 2 Prozesse
Initial: p1ready, p2ready: binare Semaphore am Anfang 0
Programm fur Prozess 1:
(1) Berechnung vor dem Barrier;(2) signal(p1ready);(3) wait(p2ready);(4) Berechnung nach dem Barrier;
Programm fur Prozess 2:
(1) Berechnung vor dem Barrier;(2) signal(p2ready);(3) wait(p1ready);(4) Berechnung nach dem Barrier;
p1ready.V p1ready.M p2ready.V p2ready.M0 ∅ 0 ∅
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 70/77
![Page 129: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/129.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Barrier fur 2 Prozesse
Initial: p1ready, p2ready: binare Semaphore am Anfang 0
Programm fur Prozess 1:
(1) Berechnung vor dem Barrier;(2) signal(p1ready);(3) wait(p2ready);(4) Berechnung nach dem Barrier;
Programm fur Prozess 2:
(1) Berechnung vor dem Barrier;(2) signal(p2ready);(3) wait(p1ready);(4) Berechnung nach dem Barrier;
p1ready.V p1ready.M p2ready.V p2ready.M1 ∅ 0 ∅
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 70/77
![Page 130: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/130.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Barrier fur 2 Prozesse
Initial: p1ready, p2ready: binare Semaphore am Anfang 0
Programm fur Prozess 1:
(1) Berechnung vor dem Barrier;(2) signal(p1ready);(3) wait(p2ready);(4) Berechnung nach dem Barrier;
Programm fur Prozess 2:
(1) Berechnung vor dem Barrier;(2) signal(p2ready);(3) wait(p1ready);(4) Berechnung nach dem Barrier;
p1ready.V p1ready.M p2ready.V p2ready.M1 ∅ 0 {P1}
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 70/77
![Page 131: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/131.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Barrier fur 2 Prozesse
Initial: p1ready, p2ready: binare Semaphore am Anfang 0
Programm fur Prozess 1:
(1) Berechnung vor dem Barrier;(2) signal(p1ready);(3) wait(p2ready);(4) Berechnung nach dem Barrier;
Programm fur Prozess 2:
(1) Berechnung vor dem Barrier;(2) signal(p2ready);(3) wait(p1ready);(4) Berechnung nach dem Barrier;
p1ready.V p1ready.M p2ready.V p2ready.M1 ∅ 0 ∅
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 70/77
![Page 132: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/132.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Barrier fur 2 Prozesse
Initial: p1ready, p2ready: binare Semaphore am Anfang 0
Programm fur Prozess 1:
(1) Berechnung vor dem Barrier;(2) signal(p1ready);(3) wait(p2ready);(4) Berechnung nach dem Barrier;
Programm fur Prozess 2:
(1) Berechnung vor dem Barrier;(2) signal(p2ready);(3) wait(p1ready);(4) Berechnung nach dem Barrier;
p1ready.V p1ready.M p2ready.V p2ready.M0 ∅ 0 ∅
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 70/77
![Page 133: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/133.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Barrier fur 2 Prozesse
Initial: p1ready, p2ready: binare Semaphore am Anfang 0
Programm fur Prozess 1:
(1) Berechnung vor dem Barrier;(2) signal(p1ready);(3) wait(p2ready);(4) Berechnung nach dem Barrier;
Programm fur Prozess 2:
(1) Berechnung vor dem Barrier;(2) signal(p2ready);(3) wait(p1ready);(4) Berechnung nach dem Barrier;
p1ready.V p1ready.M p2ready.V p2ready.M0 ∅ 0 ∅
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 70/77
![Page 134: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/134.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Barrier fur 2 Prozesse
Initial: p1ready, p2ready: binare Semaphore am Anfang 0
Programm fur Prozess 1:
(1) Berechnung vor dem Barrier;(2) signal(p1ready);(3) wait(p2ready);(4) Berechnung nach dem Barrier;
Programm fur Prozess 2:
(1) Berechnung vor dem Barrier;(2) signal(p2ready);(3) wait(p1ready);(4) Berechnung nach dem Barrier;
p1ready.V p1ready.M p2ready.V p2ready.M0 ∅ 0 ∅
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 70/77
![Page 135: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/135.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Barrier fur n Prozesse
Initial: ankommen, binarer Semaphor mit 1 initialisiertverlassen, binarer Semaphor mit 0 initialisiertcounter: atomares Register mit 0 initialisiert
Programm fur Prozess i:
(1) Berechnung vor dem Barrier;(2) wait(ankommen);(3) counter := counter + 1;(4) if counter < n // Sonderaufgabe fur letzten Prozess(5) then signal(ankommen);(6) else signal(verlassen);(7) wait(verlassen);(8) counter := counter - 1;(9) if counter > 0 // Sonderaufgabe fur letzten Prozess(10) then signal(verlassen);(11) else signal(ankommen);(12) Berechnung nach dem Barrier;
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 71/77
![Page 136: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/136.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Barrieren als abstrakter Datentyp
Wir verwenden Barrieren auch als ADT
Interne Darstellung z.B. als 4-Tupel(n,ankommen,verlassen,counter))
Operationen:
newBarrier(k): Erzeugt eine Barriere fur k Prozesse.(intern: zwei Semaphore fur ankommen und verlassen und einatomares Register counter erzeugen,Ruckgabe ist 4-Tupel (n,ankommen,verlassen,counter))
synchBarrier(B): Synchronisieren am Barrier, d.h. geradedie Zeilen (2) bis (12) aus werden ausgefuhrt fur das 4-TupelB.
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 72/77
![Page 137: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/137.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Barrier in Java
java.util.concurrent.CyclicBarrier
class CyclicBarrier
A synchronization aid that allows a set of threads to all wait for each other toreach a common barrier point... The barrier is called cyclic because it can bere-used after the waiting threads are released.
Konstruktor:
CyclicBarrier(int parties)
Creates a new CyclicBarrier that will trip when the given number of parties(threads) are waiting upon it, and does not perform a predefined action whenthe barrier is tripped.
Methoden:
public int await()
throws InterruptedException,
BrokenBarrierException
Waits until all parties have invoked await on this barrier.
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 73/77
![Page 138: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/138.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Readers & Writers
Gruppierung der Prozesse in
Readers: Prozesse, die auf eine gemeinsame Ressource lesendzugreifen
Writers: Prozesse, die auf die gemeinsame Ressourceschreibend zugreifen
Beispiel:
Flugbuchungssystem: Manche Zugriffe nur lesend: welcheFluge gibt es, wann usw, andere Zugriffe buchen Fluge,verandern damit die zur Verfugung stehenden Fluge
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 74/77
![Page 139: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/139.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Readers & Writers (2)
Erlaubt / Nicht erlaubt
Mehrere lesende Prozesse gleichzeitig, aber
Nur ein Prozess schreibt gleichzeitig
Problem:
Lose den Zugriff so, dass viele gleichzeitig lesen, aber niemehrere gleichzeitig schreiben.
Verschiedene Losungen:
Prioritat fur Readers
Priotitat fur Writers
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 75/77
![Page 140: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/140.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prioritat fur Readers
Initial: countR: atomares Register, am Anfang 0mutex, mutexR, w: bin. Sem. am Anfang 1
Programm fur Reader
(1) wait(mutexR);(2) countR := countR + 1;(3) if countR = 1 then
(4) wait(w);(5) signal(mutexR);(6) Kritischer Abschnitt(7) wait(mutexR);(8) countR := countR - 1;(9) if countR = 0 then
(10) signal(w);(11) signal(mutexR);
Programm fur Writer
(1) wait(mutex);(2) wait(w);(3) signal(mutex);(4) Kritischer Abschnitt;(5) signal(w)
mutexR schutzt Zugriff auf countR
Erster Leser blockiert Schreiber, bzw.wartet, dass Schreiber fertig wird
Letzter Leser entblockiert Schreiber
mutex sorgt dafur dass max 1 Leseran w wartet
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 76/77
![Page 141: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/141.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prioritat fur Readers
Initial: countR: atomares Register, am Anfang 0mutex, mutexR, w: bin. Sem. am Anfang 1
Programm fur Reader
(1) wait(mutexR);(2) countR := countR + 1;(3) if countR = 1 then
(4) wait(w);(5) signal(mutexR);(6) Kritischer Abschnitt(7) wait(mutexR);(8) countR := countR - 1;(9) if countR = 0 then
(10) signal(w);(11) signal(mutexR);
Programm fur Writer
(1) wait(mutex);(2) wait(w);(3) signal(mutex);(4) Kritischer Abschnitt;(5) signal(w)
mutexR schutzt Zugriff auf countR
Erster Leser blockiert Schreiber, bzw.wartet, dass Schreiber fertig wird
Letzter Leser entblockiert Schreiber
mutex sorgt dafur dass max 1 Leseran w wartet
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 76/77
![Page 142: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/142.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prioritat fur Readers
Initial: countR: atomares Register, am Anfang 0mutex, mutexR, w: bin. Sem. am Anfang 1
Programm fur Reader
(1) wait(mutexR);(2) countR := countR + 1;(3) if countR = 1 then
(4) wait(w);(5) signal(mutexR);(6) Kritischer Abschnitt(7) wait(mutexR);(8) countR := countR - 1;(9) if countR = 0 then
(10) signal(w);(11) signal(mutexR);
Programm fur Writer
(1) wait(mutex);(2) wait(w);(3) signal(mutex);(4) Kritischer Abschnitt;(5) signal(w)
mutexR schutzt Zugriff auf countR
Erster Leser blockiert Schreiber, bzw.wartet, dass Schreiber fertig wird
Letzter Leser entblockiert Schreiber
mutex sorgt dafur dass max 1 Leseran w wartet
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 76/77
![Page 143: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/143.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prioritat fur Readers
Initial: countR: atomares Register, am Anfang 0mutex, mutexR, w: bin. Sem. am Anfang 1
Programm fur Reader
(1) wait(mutexR);(2) countR := countR + 1;(3) if countR = 1 then
(4) wait(w);(5) signal(mutexR);(6) Kritischer Abschnitt(7) wait(mutexR);(8) countR := countR - 1;(9) if countR = 0 then
(10) signal(w);(11) signal(mutexR);
Programm fur Writer
(1) wait(mutex);(2) wait(w);(3) signal(mutex);(4) Kritischer Abschnitt;(5) signal(w)
mutexR schutzt Zugriff auf countR
Erster Leser blockiert Schreiber, bzw.wartet, dass Schreiber fertig wird
Letzter Leser entblockiert Schreiber
mutex sorgt dafur dass max 1 Leseran w wartet
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 76/77
![Page 144: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/144.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prioritat fur Readers
Initial: countR: atomares Register, am Anfang 0mutex, mutexR, w: bin. Sem. am Anfang 1
Programm fur Reader
(1) wait(mutexR);(2) countR := countR + 1;(3) if countR = 1 then
(4) wait(w);(5) signal(mutexR);(6) Kritischer Abschnitt(7) wait(mutexR);(8) countR := countR - 1;(9) if countR = 0 then
(10) signal(w);(11) signal(mutexR);
Programm fur Writer
(1) wait(mutex);(2) wait(w);(3) signal(mutex);(4) Kritischer Abschnitt;(5) signal(w)
mutexR schutzt Zugriff auf countR
Erster Leser blockiert Schreiber, bzw.wartet, dass Schreiber fertig wird
Letzter Leser entblockiert Schreiber
mutex sorgt dafur dass max 1 Leseran w wartet
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 76/77
![Page 145: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/145.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prioritat fur Writers
Initial: countR, countW: atomare Register, am Anfang 0mutexR, mutexW, mutex, w, r: bin. Sem. am Anfang 1
Programm fur Reader
(1) wait(mutex);(2) wait(r);(3) wait(mutexR);(4) countR := countR + 1;(5) if countR = 1 then wait(w);(6) signal(mutexR);(7) signal(r);(8) signal(mutex);(9) Kritischer Abschnitt;(10) wait(mutexR);(11) countR := countR - 1;(12) if countR = 0 then signal(w);(13) signal(mutexR);
Programm fur Writer
(1) wait(mutexW);(2) countW := countW + 1;(3) if countW = 1 then wait(r);(4) signal(mutexW);(5) wait(w);(6) Kritischer Abschnitt;(7) signal(w)(8) wait(mutexW);(9) countW := countW - 1;(10) if countW = 0 then signal(r);(11) signal(mutexW);
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 77/77
![Page 146: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/146.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prioritat fur Writers
Initial: countR, countW: atomare Register, am Anfang 0mutexR, mutexW, mutex, w, r: bin. Sem. am Anfang 1
Programm fur Reader
(1) wait(mutex);(2) wait(r);(3) wait(mutexR);(4) countR := countR + 1;(5) if countR = 1 then wait(w);(6) signal(mutexR);(7) signal(r);(8) signal(mutex);(9) Kritischer Abschnitt;(10) wait(mutexR);(11) countR := countR - 1;(12) if countR = 0 then signal(w);(13) signal(mutexR);
Programm fur Writer
(1) wait(mutexW);(2) countW := countW + 1;(3) if countW = 1 then wait(r);(4) signal(mutexW);(5) wait(w);(6) Kritischer Abschnitt;(7) signal(w)(8) wait(mutexW);(9) countW := countW - 1;(10) if countW = 0 then signal(r);(11) signal(mutexW);
mutexR, mutexW schutzenZugriff auf countR, countW
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 77/77
![Page 147: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/147.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prioritat fur Writers
Initial: countR, countW: atomare Register, am Anfang 0mutexR, mutexW, mutex, w, r: bin. Sem. am Anfang 1
Programm fur Reader
(1) wait(mutex);(2) wait(r);(3) wait(mutexR);(4) countR := countR + 1;(5) if countR = 1 then wait(w);(6) signal(mutexR);(7) signal(r);(8) signal(mutex);(9) Kritischer Abschnitt;(10) wait(mutexR);(11) countR := countR - 1;(12) if countR = 0 then signal(w);(13) signal(mutexR);
Programm fur Writer
(1) wait(mutexW);(2) countW := countW + 1;(3) if countW = 1 then wait(r);(4) signal(mutexW);(5) wait(w);(6) Kritischer Abschnitt;(7) signal(w)(8) wait(mutexW);(9) countW := countW - 1;(10) if countW = 0 then signal(r);(11) signal(mutexW);
erster Leser blockiert Schreiber
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 77/77
![Page 148: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/148.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prioritat fur Writers
Initial: countR, countW: atomare Register, am Anfang 0mutexR, mutexW, mutex, w, r: bin. Sem. am Anfang 1
Programm fur Reader
(1) wait(mutex);(2) wait(r);(3) wait(mutexR);(4) countR := countR + 1;(5) if countR = 1 then wait(w);(6) signal(mutexR);(7) signal(r);(8) signal(mutex);(9) Kritischer Abschnitt;(10) wait(mutexR);(11) countR := countR - 1;(12) if countR = 0 then signal(w);(13) signal(mutexR);
Programm fur Writer
(1) wait(mutexW);(2) countW := countW + 1;(3) if countW = 1 then wait(r);(4) signal(mutexW);(5) wait(w);(6) Kritischer Abschnitt;(7) signal(w)(8) wait(mutexW);(9) countW := countW - 1;(10) if countW = 0 then signal(r);(11) signal(mutexW);
erster Schreiber blockiert Leser
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 77/77
![Page 149: Nebenl au ge Programmierung: Praxis und Semantik€¦ · 1 Aktuelle Themen zu Informatik der Systeme: Nebenl au ge Programmierung: Praxis und Semantik Programmierprimitiven (1) PD](https://reader036.vdokument.com/reader036/viewer/2022090608/605ebd23baedb47c6d1c1d72/html5/thumbnails/149.jpg)
Einleitung Java Erweitertes Prozessmodell Semaphore Semaphore in Java Anwendungsbeispiele
Prioritat fur Writers
Initial: countR, countW: atomare Register, am Anfang 0mutexR, mutexW, mutex, w, r: bin. Sem. am Anfang 1
Programm fur Reader
(1) wait(mutex);(2) wait(r);(3) wait(mutexR);(4) countR := countR + 1;(5) if countR = 1 then wait(w);(6) signal(mutexR);(7) signal(r);(8) signal(mutex);(9) Kritischer Abschnitt;(10) wait(mutexR);(11) countR := countR - 1;(12) if countR = 0 then signal(w);(13) signal(mutexR);
Programm fur Writer
(1) wait(mutexW);(2) countW := countW + 1;(3) if countW = 1 then wait(r);(4) signal(mutexW);(5) wait(w);(6) Kritischer Abschnitt;(7) signal(w)(8) wait(mutexW);(9) countW := countW - 1;(10) if countW = 0 then signal(r);(11) signal(mutexW);
mutex sorgt dafur, dass nur einLeser an r warten kann
D. Sabel · TIDS · WS 2013/14 · Programmierprimitiven (1) 77/77