Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Parallel Programming Proofs ( yay !)

Ähnliche Präsentationen


Präsentation zum Thema: "Parallel Programming Proofs ( yay !)"—  Präsentation transkript:

1 Parallel Programming Proofs ( yay !) http://n.ethz.ch/~klauserc/FS10/PP/

2 Übersicht 1. Korrektheitsbeweise

3 Korrekt? synchronized( new Object() ) { critical_section(); }

4 Korrekt? public class Account { int balance = 0; public void withdrawTo(Account dest, int amount) { synchronized(this) { synchronized(dest) { dest.balance += amount; this.balance -= amount; } Account a, b ; // Thread A a. withdrawTo ( b,50); // Thread B b. withdrawTo ( a,100);

5 1. KORREKTHEITSBEWEISE

6 Übung #1 //Thread A public void run() { while (true) { non_critical_section(); while( !(signal.turn == 0) ) { /* try again */ } critical_section(); signal.turn = 1; } //signal is a shared object //signal.turn is declared as public volatile int turn = 0;

7 Übung #1 //signal is a shared object //signal.turn is declared as public volatile int turn = 0; 1. Statements benennen ( A 1, A 2, …) 2. Was ist zu zeigen ? 3. Invarianten finden 4. Induktion über Programmablauf 1. Invarianten gelten zu Beginn 2. Invarianten werden durch Übergänge nicht verändert

8 //Thread A public void run() { while (true) { A1: non_critical_section(); A2: while( !(signal.turn == 0) ) { /* try again */ } A3: critical_section(); A4: signal.turn = 1; } //Thread B public void run() { while (true) { B1: non_critical_section(); B2: while( !(signal.turn == 1) ) { /* try again */ } B3: critical_section(); B4: signal.turn = 0; } Was ist zu zeigen ? Welche Invarianten gelten ? Induktion über Programmablauf : Verankerung ( Programmanfang ) Schritt 1. Einfluss des anderen Threads ausschliessen 2. Zeigen, dass Invarianten bei allen Übergängen gültig bleiben

9 Übung #2 //Worker 0 public void run() { while (true) { s0.request(); while(true) { if (s1.read() == 1) { break; } critical_section(); s0.free(); }

10 //Worker 0 public void run() { while (true) { A1: s0.request(); while(true) { A2: if (s1.read() == 1) { break; } A3: critical_section(); A4: s0.free(); } //Worker 1 public void run() { while (true) { B1: s1.request(); while(true) { B2: if (s0.read() == 1) { break; } B3: critical_section(); B4: s1.free(); } Was ist zu zeigen ? Welche Invarianten gelten ? Induktion über Programmablauf : Verankerung ( Programmanfang ) Schritt 1. Einfluss des anderen Threads ausschliessen 2. Zeigen, dass Invarianten bei allen Übergängen gültig bleiben

11 FRAGEN?


Herunterladen ppt "Parallel Programming Proofs ( yay !)"

Ähnliche Präsentationen


Google-Anzeigen