140 likes | 300 Views
Parallel Programming. (J)CSP. http://n.ethz.ch/~klauserc/FS10/PP/. Übersicht. Nachbesprechung Übung 6 Nachbesprechung Übung 7 Vorbesprechung Übung 8. Proofs. 1. Nachbesprechung Übung 6. Labels für Thread A. public void run() { while ( true ) { A1: // non-critical section
E N D
Parallel Programming (J)CSP http://n.ethz.ch/~klauserc/FS10/PP/
Übersicht • NachbesprechungÜbung 6 • NachbesprechungÜbung 7 • VorbesprechungÜbung 8
Proofs 1. NachbesprechungÜbung 6
Labels für Thread A • publicvoid run() { • while (true) { • A1: // non-critical section • A2: turn0.request(); • A3: while (true) { • if (turn1.read() == 1) break; • A4: turn0.free(); • A5: turn0.request(); • } • A6:// critical section • A7: turn0.free(); • } • }
publicvoid run() { • while (true) { • A1: // non-critical section • A2: turn0.request(); • A3: while (true) { • if (turn1.read() == 1) • break; • A4: turn0.free(); • A5: turn0.request(); • } • A6:// critical section • A7: turn0.free(); • } • } • publicvoid run() { • while (true) { • B1: // non-critical section • B2: turn1.request(); • B3: while (true) { • if (turn0.read() == 1) • break; • B4: turn1.free(); • B5: turn1.request(); • } • B6:// critical section • B7: turn1.free(); • } • } “turn0wirdausschliesslich von Thread A gesetzt.” Jeweilsentweder “turn0.flag == 0 weilgerade so gesetzt” oder “turn0.flag == 0 dank Induktionshypothese (weilnichtgeändert)”
ReaderWriterLock 2. NachbesprechungÜbung 7
JCSP 3. VorbesprechungÜbung 8
CommunicatingSequentialProcesses Console Printer Broken Sensor Irregular Signal TimedPolling req out reg out res in
CommunicatingSequentialProcesses Console Printer Broken Sensor Repeater pulse in assign in out TimedPolling req out reg out res in
Dining Philosophers • Locking mit JCSP implementieren • Monitor • ReaderWriterLock • Semaphore • Vorsicht Deadlocks!
Mergesort II: Revengeof JCSP • Nein, das wird nur in der Theorie effizient sein ^^ • Arrays sind Privatsache; werden als Elementweise in einzelnen Nachrichten von Prozess zu Prozess geschickt • Länge des Arrays muss signalisiert werden: • 1. Nachricht enthält Länge • Spezielle Ende-des-Array-Nachricht • 2. Kanal für Kontrollnachrichten (via select)