Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Katarina Drollinger Geändert vor über 10 Jahren
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?
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.