Δοσοληψίες Βάσεις Δεδομένων Διδάσκων: Μαρία Χαλκίδη με βάση slides από A. Silberschatz, H. Korth, S. Sudarshan, Database System Concepts, 5 th edition
Βασικές έννοιες της δοσοληψίας Δοσοληψία είναι μία σειρά από ενέργειες που διαβάζουν ή/και πιθανά ενημερώνουν δεδομένα. Η δοσοληψία πρέπει να βλέπει μία συνεπή ΒΔ. Στη διάρκεια της εκτέλεσης μίας δοσοληψίας η ΒΔ μπορεί να είναι ασυνεπής. Όταν ολοκληρωθεί η εκτέλεση της δοσοληψίας, η ΒΔ πρέπει να είναι συνεπής. Δύο κύρια θέματα προς μελέτη: Διάφοροι τύποι αποτυχίας, όπως αποτυχία hardware και καταστροφή συστήματος Ταυτόχρονες εκτελέσεις πολλαπλών δοσοληψιών Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 2
Δοσοληψίες & Ταυτοχρονισμός Ανάληψη από το λογαριασμό ΧΧΧ 500$! Κατάθεση στο λογαριασμό ΧΧΧ 200$ Ποιό είναι το υπόλοιπο του λογαριασμού ΧΧΧ DB Σχήμα από διαφάνειες μαθήματος Π. Βασιλειάδης, Τμ. Πληροφορικής, Παν.Ιωαννίνων Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 3
Δοσοληψίες & Ταυτοχρονισμός Κράτησε για τον κ. Χ την θέση 13Α για LA! Κράτησε για τον κ. Y την θέση 13Α για LA! DB Πόσοι ταξιδεύουν για LA? Σχήμα από διαφάνειες μαθήματος Π. Βασιλειάδης, Τμ. Πληροφορικής, Παν.Ιωαννίνων Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 4
ACID Ιδιότητες Το σύστημα ΒΔ πρέπει να επιβεβαιώνει: Ατομικότητα (Atomicity). Είτε όλες οι λειτουργίες των δοσοληψιών πρέπει να αναπαριστώνται κατάλληλα στη ΒΔ είτε καμία. Συνέπεια(Consistency). Η εκτέλεση μίας δοσοληψίας μεμονωμένα διατηρεί τη συνέπεια της ΒΔ. Απομόνωση (Isolation). πολλαπλές δοσοληψίες μπορούν να εκτελούνται ταυτόχρονα, κάθε δοσοληψία δεν θα πρέπει να γνωρίζει τις άλλες δοσοληψίες που εκτελούνται ταυτόχρονα. Τα ενδιάμεσα αποτελέσματα δοσοληψιών πρέπει να κρύβονται από τις άλλες ταυτόχρονα εκτελούμενες δοσοληψίες. Για κάθε ζεύγος δοσοληψιών T i και T j, φαίνεται στο T i ότι είτε T j, τελείωσε την εκτέλεση πριν T i ξεκινήσει, είτε ότι το T j άρχισε την εκτέλεση μετά την ολοκλήρωση της T i Διάρκεια (Durability). Μετά την επιτυχή ολοκλήρωση μίας δοσοληψίας, οι αλλαγές που γίνονται τη ΒΔ παραμένουν, ακόμα και εάν υπάρχουν αποτυχίες στο σύστημα. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 5
Παράδειγμα (1) Δοσοληψία για τη μεταφορά του ποσού των $50 από το λογαριασμό A στο λογαριασμό B: 1. read(a) 2. A := A 50 3. write(a) 4. read(b) 5. B := B + 50 6. write(b) Απαίτηση συνέπειας το άθροισμα του A και B παραμένει το ίδιο με την εκτέλεση της δοσοληψίας. Απαίτηση ατομικότητας Αποτυχία δοσοληψίας μεταξύ του step 3 και step 6, το σύστημα πρέπει να επιβεβαιώσει ότι οι ενημερώσεις του δεν αντανακλώνται στη ΒΔ αλλιώς θα οδηγήσει σε ασυνέπεια. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 6
Παράδειγμα (2) Απαίτηση διάρκειας μόλις ο χρήστης ενημερωθεί ότι η δοσοληψία έχει ολοκληρωθεί (δηλ., η μεταφορά των $50 έχει λάβει χώρα), οι ενημερώσεις τις ΒΔ πρέπει να παραμείνουν παρά την ύπαρξη κάποιων αποτυχιών. Απαίτηση απομόνωσης 1. read(a) 2. A := A 50 3. write(a) 4. read(b) 5. B := B + 50 6. write(b) εάν ανάμεσα στα steps 3 and 6, μία άλλη δοσοληψία επιτραπεί να προσπελάσει την μερικώς ενημερωμένη ΒΔ, θα δει μία ασυνεπή ΒΔ (το A + B θα είναι μικρότερο από αυτό που πρέπει να είναι). Μπορούμε να επιβεβαιώσουμε τη συνέπεια της ΒΔ τρέχοντας τις δοσοληψίες σειριακά. Ωστόσο εκτελώντας πολλαπλές δοσοληψίες ταυτόχρονα έχει σημαντικά πλεονεκτήματα. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 7
Κατάσταση δοσοληψίας (1) Ενεργή(Active), αρχική κατάσταση. Η δοσοληψία παραμένει σ αυτή τη κατάσταση όσο εκτελείται Μερικώς ολοκληρωμένη (Partially committed), μετά την εκτέλεση της τελευταίας εντολής (final statement). Αποτυχημένη(Failed), μετά την ανακάλυψη ότι η κανονική εκτέλεση δεν μπορεί να προχωρήσει. Aborted, μετά από την ακύρωση μίας δοσοληψίας. Η ΒΔ αποκαθίσταται στην κατάσταση της πριν την αρχή της δοσοληψίας. Δύο επιλογές μετά τη διακοπή δοσοληψίας: Επανεκκίνηση της δοσοληψίας μόνο εάν δεν υπάρχει κάποιο εσωτερικό λογικό λάθος Αναγκαστικός τερματισμός της δοσοληψίας(kill the transaction) Ολοκληρωμένη (Committed), μετά την επιτυχή εκτέλεση της δοσοληψίας. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 8
Κατάσταση δοσοληψίας (2) Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 9
Υλοποίηση Ατομικότητας και Διάρκειας Το στοιχείο της διαχείρισης αποκατάστασης ενός συστήματος ΒΔ υλοποιεί την υποστήριξη ατομικότητας και διάρκειας. Το σκιασμένο σχήμα ΒΔ (shadow-database scheme): Υποθέτουμε ότι μόνο μία δοσοληψία είναι ενεργή κάθε φορά. Ένας δείκτης ονομαζόμενος db_pointer δείχνει πάντα στο τρέχον αντίγραφο της ΒΔ. Όλες οι ενημερώσεις γίνονται πάνω στο shadow copy της ΒΔ. Ο db_pointer δείχνει στο ενημερωμένο shadow copy μόνο αφού η δοσοληψία φτάσει στη φάση της ολοκληρωμένης δοσοληψίας και όλες οι ενημερωμένες σελίδες έχουν γραφεί στο δίσκο. Στην περίπτωση που αποτύχει μία δοσοληψία, το παλιό αντίγραφο που δείχνεται από το db_pointer μπορεί να χρησιμοποιηθεί και το shadow copy μπορεί να διαγραφεί. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 10
Υλοποίηση Ατομικότητας και Διάρκειας (2) Shadow-database scheme: Υποθέτουμε ότι οι δίσκοι δεν αποτυγχάνουν Χρήσιμο για κειμενογράφους (text editors), αλλά ιδιαίτερα μη αποτελεσματικό για μεγάλες ΒΔ: εκτελώντας μία απλή δοσοληψία απαιτεί αντιγραφή ολόκληρης της ΒΔ. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 11
Ταυτόχρονες εκτελέσεις Πολλαπλές δοσοληψίες επιτρέπεται να τρέχουν ταυτόχρονα στο σύστημα. Πλεονεκτήματα: αυξημένη χρήση του επεξεργαστή και του δίσκου,οδηγεί σε καλύτερο transaction throughput: μία συναλλαγή μπορεί να χρησιμοποιεί τη CPU ενώ μία άλλη διαβάζει από ή γράφει στο δίσκο Μείωση μέσου χρόνο απόκρισης για δοσοληψίες: μικρές δοσοληψίες πρέπει να περιμένουν πίσω από μεγάλες δοσοληψίες. Σχήματα ταυτόχρονου ελέγχου μηχανισμοί για να επιτυγχάνουμε απομόνωση ελέγχουμε την αλληλεπίδραση ανάμεσα στις ταυτόχρονες δοσοληψίες προκειμένου να τις αποτρέψουμε να καταστρέψουν την συνέπεια της ΒΔ Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 12
Χρονοπρογράμματα (Schedules) Χρονοπρογράμματα ακολουθίες που υποδεικνύουν τη χρονολογική σειρά με την οποία οι εντολές από τις ταυτόχρονες δοσοληψίες εκτελούνται Ένα χρονοπρόγραμμα για ένα σύνολο δοσοληψιών πρέπει να αποτελείται από όλες τις εντολές των δοσοληψιών διατηρούμε τη σειρά με την οποία εμφανίζονται οι εντολές σε κάθε μεμονωμένη δοσοληψία. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 13
Παράδειγμα χρονοπρογραμμάτων (1) T 1 transfer $50 from A to B, and T 2 transfer 10% of the balance from A to B. Α 1000$ Β 2000$ Schedule 1- Σειριακό χρονοπρόγραμμα: T1 ακολουθείται από το T2. Temp=950 Α 855 Β 2145 Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 14
Παράδειγμα χρονοπρογραμμάτων (2) Schedule 1 Schedule 3 Schedule 3: Μη σειριακό. Ισοδύναμο με το Schedule 1 Στο Schedule 1 και 3, το A + B διατηρείται Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 15
Παράδειγμα χρονοπρογραμμάτων (3) Schedule 4 : Ταυτόχρονο χρονοπρόγραμμα Δεν διατηρεί την τιμή του A+Β Schedule 1 Schedule 4 A=950 A=1000 A=950 B=2050 B=2100 Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 16
Σειριακή Διάταξη (Serializability) Βασική υπόθεση: Κάθε δοσοληψία διατηρεί τη συνέπεια της ΒΔ. Η σειριακή εκτέλεση ενός συνόλου δοσοληψιών διατηρεί τη συνέπεια της ΒΔ. Ένα (ταυτόχρονο) χρονοπρόγραμμα μπορεί να γίνει σειριακό εάν είναι ισοδύναμο με ένα σειριακό χρονοπρόγραμμα. Διαφορετικές μορφές ισοδυναμίας χρονοπρογραμμάτος οδηγούν στις έννοιες της: 1. Σειριακής διάταξης με σύγκρουση(διένεξη) - conflict serializability 2. Σειριακή διάταξη με όψη(προβολή) - view serializability Τα χρονοπρογράμματα που θεωρούμε αποτελούνται μόνο από εντολές read και write. Αγνοούμε λειτουργίες άλλες εκτός των εντολών read and write και υποθέτουμε ότι δοσοληψίες μπορούν να εκτελούν τυχαίους υπολογισμούς πάνω στα δεδομένα σε τοπικούς buffers μεταξύ των αναγνώσεων και εγγραφών. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 17
Σειριακή διάταξη με σύγκρουση (1) Εντολές l i και l j των δοσοληψιών T i και T j αντίστοιχα, συγκρούονται(conflict) εάν και μόνο εάν υπάρχουν κάποια αντικείμενα Q που προσπελαύνονται και από την l i και από την l j, και τουλάχιστον μία αυτές τις εντολές γράφει το Q. 1. l i = read(q), l j = read(q). l i and l j don t conflict. 2. l i = read(q), l j = write(q). They conflict. 3. l i = write(q), l j = read(q). They conflict 4. l i = write(q), l j = write(q). They conflict Μία σύγκρουση (conflict) ανάμεσα σε l i και l j ενδυναμώνει μια λογική χρονική σειρά ανάμεσα τους. Εάν l i και l j εκτελούνται ακολουθιακά στο χρονοπρόγραμμα και δεν υπάρχουν συγκρούσεις, τα αποτελέσματα τους παραμένουν τα ίδια ακόμα και εάν έχουν ανταλλαχθεί στο χρονοπρόγραμμα. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 18
Σειριακή διάταξη με σύγκρουση (2) Εάν ένα χρονοπρόγραμμα S μπορεί να μετασχηματιστεί σε ένα χρονοπρόγραμμα S από μία σειρά εναλλαγών (swaps) μη συγκρουόμενων εντολών, λέμε ότι το S και S είναι ισοδύναμα ως προ τις συγκρούσεις (conflict equivalent). Λέμε ότι ένα χρονοπρόγραμμα S είναι σειριοποιήσιμο ως προς τις συγκρούσεις(conflict serializable) εάν είναι ισοδύναμο ως προ τις συγκρούσεις με ένα σειριακό χρονοπρόγραμμα Παράδειγμα χρονοπρογράμματος που δεν είναι σε σειριακή διάταξη με σύγκρουση : T 3 T 4 read(q) write(q) write(q) Δεν μπορούμε να αλλάξουμε τις εντολές στο παραπάνω χρονοπρόγραμμα για να πάρουμε το σειριακό χρονοπρόγραμμα < T 3, T 4 >, ή < T 4, T 3 >. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 19
Παράδειγμα: Σειριακή διάταξη με σύγκρουση Schedule 3 μπορεί να μετασχηματιστεί στο Schedule 6, σειριακό χρονοπρόγραμμα όπου T 2 ακολουθεί T 1, με μία σειρά εναλλαγών μη συγκρουόμενων εντολών. Schedule 3 μπορεί να μπει σε σειριακή διάταξη με σύγκρουση. Schedule 3 Schedule 5 Schedule 6 Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 20
Ερώτηση T 1 read(a); write(a); read(b); write(b). T 2 read(b); write(b); read(a); write(a). Είναι σειριοποιήσιμο ως προς τις συγκρούσεις? Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 21
Προβλήματα με την εκτελεση δοσοληψιών Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 22
Σειριακή διάταξη όψης Έστω S και S είναι δύο χρονοπρογράμματα με το ίδιο σύνολο δοσοληψιών. S και S είναι ισοδύναμα ως προς την όψη (view equivalent) εάν ισχύουν οι ακόλουθες 3 συνθήκες : 1. Για κάθε αντικείμενο Q, εάν η δοσοληψία T i διαβάζει την αρχική τιμή του Q στο χρονοπρόγραμμα S, τότε η δοσοληψία T i πρέπει στο χρονοπρόγραμμα S,να διαβάζει επίσης την αρχική τιμή του Q. 2. Για κάθε αντικείμενο Q εάν η δοσοληψία T i εκτελεί read(q) στο χρονοπρόγραμμα S, και αυτή η τιμή παράγεται από μία λειτουργία write(q) στη δοσοληψία T j, τότε η δοσοληψία T i πρέπει στο S να διαβάζει επίσης τη τιμή του Q που παράγεται από τη δοσοληψίαt j. 3. Για κάθε αντικείμενο Q, η δοσοληψία που εκτελεί το τελικό write(q) στο S πρέπει να εκτελεί το τελικο write(q) στο S. Η ισοδυναμία ως προ την όψη βασίζεται επίσης στις εντολές read και write. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 23
Σειριακή διάταξη όψης (2) Ένα χρονοπρόγραμμα S είναι σε σειριακή διάταξη ως προς την όψη (view serializable) εάν είναι ισοδύναμο ως προς την όψη με σειριακό χρονοπρόγραμμα. Κάθε χρονοπρόγραμμα που είναι σε σειριακή διάταξη ως προς τη σύγκρουση είναι επίσης σε σειριακή διάταξη ως προς την όψη. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 24
Σειριακή διάταξη όψης (3) Schedule 9 ισοδύναμο ως προς την όψη με το σειριακό χρονοπρόγραμμα <Τ3, Τ4, Τ6> Κάθε ζεύγος συνεχόμενων εγγραφών έρχονται σε σύγκρουση Δεν μπορεί να μπει σε σειριακή διάταξη ως προς τη σύγκρουση Εκτέλεση εντολών write(q) χωρίς να έχουν εκτελέσει Read(Q) Tυφλή εγγραφή Τυφλές εγγραφές εμφανίζονται σε κάθε χρονοπρόγραμμα μπορεί να μπει σε σειριακή διάταξη ως προς την όψη αλλά δεν μπορεί να μπει σε σειριακή διάταξη ως προς τη σύγκρουση Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 25
Άλλες έννοιες της σειριακής διάταξης Schedule 8: Παράγει τα ίδια αποτελέσματα με το σειριακό χρονοπρόγραμμα < T 1, T 5 >. Είναι ισοδύναμο ως προς τη σύγκρουση ή την προβολή ως προς αυτό? T1: read(b) διαβάζει το Αποτέλεσμα της T5:write(B) Δε συμβαίνει το ίδιο στο < T1, T5 > Ο ορισμός μίας τέτοιας ισοδυναμίας απαιτεί ανάλυση λειτουργιών πέρα από read και write Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 26
Αποκατάσταση (Recoverability) Ανάγκη να αντιμετωπίσουμε την επίδραση των αποτυχιών συναλλαγής σε ταυτόχρονα εκτελέσιμες συναλλαγές. Χρονοπρόγραμμα αποκαταστάσιμο (Recoverable schedule)- εάν η συναλλαγή Τ j διαβάζει αντικείμενα που προηγουμένως έχουν γραφτεί από μία συναλλαγή T i, η λειτουργία της ολοκλήρωσης εκτέλεσης (commit) της T i εμφανίζεται πριν την λειτουργία ολοκλήρωσης εκτέλεσης (commit) της T j. Το ακόλουθο χρονοπρόγραμμα (Schedule 11) δεν είναι αποκαταστάσιμο εάν η T 9 κάνει commit αμέσως μετά το read Εάν T 8 διακοπεί, T 9 θα έχει διαβάσει (και πιθανά εμφανίσει στο χρήστη) μία ασυνεπή κατάσταση της ΒΔ. Συνεπώς η ΒΔ πρέπει να επιβεβαιώνει ότι τα χρονοπρογράμματα μπορούν να ανανήψουν. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 27
Παράδειγμα S: R1(X)R2(X)W1(X)R1(Y)W2(X)C2W1(Y)C1 S: R1(X)W1(X) R2(X) R1(Y)W2(X)C2Α1 Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 28
Αποκατάσταση (2) Διαδοχικές αναιρέσεις (Cascading rollback) η αποτυχία μίας απλής δοσοληψίας οδηγεί σε μία σειρά από αναιρέσεις δοσοληψιών. Υποθέτουμε το ακόλουθο χρονοπρόγραμμα όπου καμία από από τις συναλλαγές δεν έχει κάνει ακόμα commit (το χρονοπρόγραμμα μπορεί να αποκατασταθεί) Εάν T 10 αποτύχει, T 11 και T 12 πρέπει επίσης να αναιρεθούν. Μπορεί να οδηγήσει σε ένα σημαντικό σύνολο δουλειάς που δεν θα εκτελεστεί Βάσεις Δεδομένων, Παν. Πειραιά 29
Αποκατάσταση (3) Χρονοπρογράμματα χωρίς διαδοχικές αναιρέσεις (Cascadeless schedules) δεν μπορούν να συμβούν διαδοχικές αναιρέσεις Για κάθε ζεύγος δοσοληψιών T i και T j έτσι ώστε T j διαβάζει ένα αντικείμενο που γράφτηκε προηγουμένως από το T i, η λειτουργία commit του T i εμφανίζεται πριν την λειτουργία read του T j. Κάθε χρονοπρόγραμμα χωρίς διαδοχικές αναιρέσεις μπορεί επίσης να ανανήψει Είναι επιθυμητό να περιορίσουμε τα χρονοπρογράμματα σε αυτά που είναι χωρίς διαδοχικές αναιρέσεις Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 30
Υλοποίηση απομόνωσης Τα χρονοπρογράμματα πρέπει να μπορεί να είναι σειριακά ως προς τη σύγκρουση ή την όψη, για χάρη της συνέπειας της ΒΔ και κατά προτίμηση χωρίς διαδοχικές αναιρέσεις. Μία πολιτική στην οποία μόνο μία δοσοληψία μπορεί να εκτελεστεί τη φορά παράγει σειριακά χρονοπρογράμματα, αλλά παρέχει μικρό βαθμό συγχρονικότητας. Σχήματα ταυτόχρονου ελέγχου- tradeoff ανάμεσα στο σύνολο της ταυτοχρονικότητας που επιτρέπουν και το σύνολο του παραπάνω φόρτου που προκαλούν. Κάποια σχήματα επιτρέπουν να παράγονται μόνο χρονοπρογράμματα που μπορούν να είναι σειριακά ως προς τη σύγκρουση, ενώ άλλα επιτρέπουν χρονοπρογράμματα που μπορεί να είναι σειρικά ως προς την όψη και δεν είναι σειριακά ως προς τη σύγκρουση. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 31
Ορισμός δοσοληψιών στην SQL Μία γλώσσα χειρισμού δεδομένων πρέπει να περιλαμβάνει μία δομή για να καθορίσει το σύνολο των ενεργειών που συνιστούν μία δοσοληψία. Στην SQL, μία δοσοληψία αρχίζει έμμεσα. Μία δοσοληψία στην SQL τελειώνει με τις ακόλουθες εντολές: Commit work τελειώνει μία τρέχουσα δοσοληψία και αρχίζει μία νέα. Rollback work διακόπτει μία τρέχουσα δοσοληψία. Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 32
Έλεγχος για σειριακή διάταξη Υποθέτουμε κάποιο χρονοπρόγραμμα από ένα σύνολο δοσοληψιών T 1, T 2,..., T n Γράφημα προτεραιότητας (Precedence graph) ένα κατευθυνόμενο γράφημα όπου οι κόμβοι είναι οι δοσοληψίες Σχεδιάζουμε μία ακμή από T i στο T j ένα υπάρχει σύγκρουση σε δύο δοσοληψίες, κα T i προσπελαύνει το αντικείμενο πάνω στο οποίο συμβαίνει η σύγκρουση νωρίτερα. Τ i εκτελεί τη write(q) πριν η Τ j εκτελεί τη read(q) Τ i εκτελεί τη read(q) πριν η Τ j εκτελεί τη write(q) Τ i εκτελεί τη write(q) πριν η Τ j εκτελεί τη write(q) Μπορούμε να γράψουμε το όνομα του αντικειμένου που επεξεργαζόμαστε πάνω στην ακμή. ΠΑΡΑΔΕΙΓΜΑ 1 x y Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 33
Παραδείγματα(1): Γράφημα προτεραιότητας (a) Schedule 1 (b) Schedule 2 Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 34
Παραδείγματα(2): Γράφημα προτεραιότητας Τ1 read(a) πριν Τ2 write(a) T2 read(b) πριν Τ1 write(b) Περιέχει κύκλο που υποδεικνύει ότι αυτό το χρονοπρόγραμμα δεν μπορεί να μπει σε σειριακή διάταξη Βάσεις Δεδομένων ΙΙ, Παν. Πειραιά 35