This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
|
java:starvation_fairness [2015/04/19 15:33] gthanos [Υλοποιώντας την ισότιμη χρήση των πόρων] |
java:starvation_fairness [2015/04/19 16:33] gthanos [Χρησιμοποιώντας Locks αντί για συγχρονισμένα blocks/μεθόδους] |
||
|---|---|---|---|
| Line 24: | Line 24: | ||
| ==== Χρησιμοποιώντας Locks αντί για συγχρονισμένα blocks/ | ==== Χρησιμοποιώντας Locks αντί για συγχρονισμένα blocks/ | ||
| - | Προκειμένου να αυξήουμε την αποτελεσματικότητα θα χρησιμοποιήσουμε Locks αντί για συγχρονισμένες μεθόδους και συγχρονισμένα blocks. Τα Locks χρησιμοποιούν τα εργαλεία που είδαμε μέχρι τώρα για να δημιουργήσουν πιο σύνθετους μηχανισμούς | + | Προκειμένου να αυξήουμε την αποτελεσματικότητα θα χρησιμοποιήσουμε Locks αντί για συγχρονισμένες μεθόδους και συγχρονισμένα blocks. Τα Locks χρησιμοποιούν τα εργαλεία που είδαμε μέχρι τώρα για να δημιουργήσουν πιο σύνθετους μηχανισμούς. |
| <code java Synchronizer.java> | <code java Synchronizer.java> | ||
| Line 70: | Line 70: | ||
| Εάν κοιτάξετε την κλάση // | Εάν κοιτάξετε την κλάση // | ||
| - | As stated earlier synchronized blocks makes no guarantees about what thread is being granted access if more than one thread is waiting to enter. Nor does wait() make any guarantees about what thread is awakened when notify() | + | Η παραπάνω υλοποίηση της κλειδαριάς δεν μας εξασφαλίζει οποιαδήποτε ισοτιμία ως προς τη κατανομή του χρόνου εκτέλεσης των νημάτων. Η notify() |
| + | |||
| + | <WRAP important 80% round center> | ||
| + | Όταν περιφρουρούμε ένα κρίσιμο τμήμα κώδικα με μία κλειδαριά | ||
| + | </ | ||
| ==== Υλοποίηση Fair Lock ==== | ==== Υλοποίηση Fair Lock ==== | ||
| Line 149: | Line 153: | ||
| </ | </ | ||
| + | Παρατηρήστε ότι μόνο ένα νήμα λαμβάνει την κλειδαριά κάθε φορά, αλλά ο χρονοπρογραμματισμός των νημάτων γίνεται με την σειρά. Όταν ένα νήμα προσπαθεί να πάρει την κλειδαριά εξυπηρετείται μόνο αν δεν υπάρχουν άλλα νήματα στην ουρά, ενώ αν υπάρχουν αυτά εξυπηρετούνται με την σειρά. Κάθε νήμα περιμένει τη σειρά του λαμβάνοντας το lock ενός διαφορετικού αντικειμένου. Με αυτόν τον τρόπο έχουμε την δυνατότητα καλώντας την notify() για το αντικείμενο για το οποίο | ||