java:starvation_fairness
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| java:starvation_fairness [2015/04/19 16:07] – [Υλοποίηση Fair Lock] gthanos | java:starvation_fairness [2017/03/21 13:09] (current) – [Παρατεταμένη στέρηση πόρων] gthanos | ||
|---|---|---|---|
| Line 5: | Line 5: | ||
| Η παρατεταμένη στέρηση πόρων μπορεί να οφείλεται στους εξής λόγους: | Η παρατεταμένη στέρηση πόρων μπορεί να οφείλεται στους εξής λόγους: | ||
| * Νήματα με αυξημένη προτεραιότητα καταναλώνουν όλο τον επεξεργαστικό χρόνο από νήματα με περιορισμένη προτεραιότητα. | * Νήματα με αυξημένη προτεραιότητα καταναλώνουν όλο τον επεξεργαστικό χρόνο από νήματα με περιορισμένη προτεραιότητα. | ||
| - | * Νήματα μπλοκάρονται διαρκώς από τον να μπουν μέσα σε ένα συγχρονισμένο block και να λάβουν το σχετικό lock καθώς | + | * Νήματα μπλοκάρονται διαρκώς από τον να μπουν μέσα σε ένα συγχρονισμένο block και να λάβουν το σχετικό lock καθώς άλλα νήματα καταλαμβάνουν διαρκώς τα monitor που αντιστοιχούν στους πόρους αυτούς. |
| ==== Υλοποιώντας την ισότιμη χρήση των πόρων ==== | ==== Υλοποιώντας την ισότιμη χρήση των πόρων ==== | ||
| Line 71: | Line 71: | ||
| Η παραπάνω υλοποίηση της κλειδαριάς δεν μας εξασφαλίζει οποιαδήποτε ισοτιμία ως προς τη κατανομή του χρόνου εκτέλεσης των νημάτων. Η notify() είμαστε σίγουροι ότι θα ξυπνήσει ένα νήμα, αλλά δεν ξέρουμε ποιο νήμα θα είναι αυτό κάθε φορά. Παρακάτω δίνεται η υλοποίηση μίας κλειδαριάς που επιτρέπει την ισότιμη επιλογή νημάτων προς εκτέλεση μέσω ενός μηχανισμού [[wp> | Η παραπάνω υλοποίηση της κλειδαριάς δεν μας εξασφαλίζει οποιαδήποτε ισοτιμία ως προς τη κατανομή του χρόνου εκτέλεσης των νημάτων. Η notify() είμαστε σίγουροι ότι θα ξυπνήσει ένα νήμα, αλλά δεν ξέρουμε ποιο νήμα θα είναι αυτό κάθε φορά. Παρακάτω δίνεται η υλοποίηση μίας κλειδαριάς που επιτρέπει την ισότιμη επιλογή νημάτων προς εκτέλεση μέσω ενός μηχανισμού [[wp> | ||
| + | |||
| + | <WRAP important 80% round center> | ||
| + | Όταν περιφρουρούμε ένα κρίσιμο τμήμα κώδικα με μία κλειδαριά (όπως η παραπάνω) το οποίο μπορεί να δώσει ένα ή περισσότερα Exceptions είναι σημαντικό να τοποθετούμε τη μέθοδο unlock() μέσα σε ένα finally block. Με αυτό τον τρόπο είμαστε βέβαιοι ότι ακόμη και εάν συμβεί κάποιο Exception, η κλειδαριά θα ξεκλειδώσει, | ||
| + | <code java> | ||
| + | lock.lock(); | ||
| + | try{ | ||
| + | //do critical section code, which may throw exception | ||
| + | } finally { | ||
| + | lock.unlock(); | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| ==== Υλοποίηση Fair Lock ==== | ==== Υλοποίηση Fair Lock ==== | ||
| Line 112: | Line 124: | ||
| boolean | boolean | ||
| synchronized(this){ | synchronized(this){ | ||
| - | waitingThreads.add(queueObject); | + | waitingThreads.add(queueObject); |
| } | } | ||
java/starvation_fairness.1429459679.txt.gz · Last modified: 2015/04/19 15:08 (external edit)
