User Tools

Site Tools


java:starvation_fairness

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:starvation_fairness [2015/04/19 16:33] – [Χρησιμοποιώντας Locks αντί για συγχρονισμένα blocks/μεθόδους] gthanosjava:starvation_fairness [2017/03/21 13:09] (current) – [Παρατεταμένη στέρηση πόρων] gthanos
Line 5: Line 5:
 Η παρατεταμένη στέρηση πόρων μπορεί να οφείλεται στους εξής λόγους:  Η παρατεταμένη στέρηση πόρων μπορεί να οφείλεται στους εξής λόγους: 
   * Νήματα με αυξημένη προτεραιότητα καταναλώνουν όλο τον επεξεργαστικό χρόνο από νήματα με περιορισμένη προτεραιότητα.   * Νήματα με αυξημένη προτεραιότητα καταναλώνουν όλο τον επεξεργαστικό χρόνο από νήματα με περιορισμένη προτεραιότητα.
-  * Νήματα μπλοκάρονται διαρκώς από τον να μπουν μέσα σε ένα συγχρονισμένο block και να λάβουν το σχετικό lock καθώς σε άλλα νήματα καταλαμβάνουν διαρκώς τα monitor που αντιστοιχούν στους πόρους αυτούς, χωρίς να καλούν συχνά τις μεθόδους //notify()// ή //notifyAll()//.+  * Νήματα μπλοκάρονται διαρκώς από τον να μπουν μέσα σε ένα συγχρονισμένο block και να λάβουν το σχετικό lock καθώς άλλα νήματα καταλαμβάνουν διαρκώς τα monitor που αντιστοιχούν στους πόρους αυτούς.
  
 ==== Υλοποιώντας την ισότιμη χρήση των πόρων ==== ==== Υλοποιώντας την ισότιμη χρήση των πόρων ====
Line 74: Line 74:
 <WRAP important 80% round center> <WRAP important 80% round center>
 Όταν περιφρουρούμε ένα κρίσιμο τμήμα κώδικα με μία κλειδαριά (όπως η παραπάνω) το οποίο μπορεί να δώσει ένα ή περισσότερα Exceptions είναι σημαντικό να τοποθετούμε τη μέθοδο unlock() μέσα σε ένα finally block. Με αυτό τον τρόπο είμαστε βέβαιοι ότι ακόμη και εάν συμβεί κάποιο Exception, η κλειδαριά θα ξεκλειδώσει, ώστε να μπορέσουν άλλα νήματα να κλειδώσουν και να εκτελέσουν το κρίσιμο τμήμα του κώδικα. Όταν περιφρουρούμε ένα κρίσιμο τμήμα κώδικα με μία κλειδαριά (όπως η παραπάνω) το οποίο μπορεί να δώσει ένα ή περισσότερα Exceptions είναι σημαντικό να τοποθετούμε τη μέθοδο unlock() μέσα σε ένα finally block. Με αυτό τον τρόπο είμαστε βέβαιοι ότι ακόμη και εάν συμβεί κάποιο Exception, η κλειδαριά θα ξεκλειδώσει, ώστε να μπορέσουν άλλα νήματα να κλειδώσουν και να εκτελέσουν το κρίσιμο τμήμα του κώδικα.
 +<code java>
 +lock.lock();
 +try{
 +  //do critical section code, which may throw exception
 +} finally {
 +  lock.unlock();
 +}
 +</code>
 </WRAP> </WRAP>
  
Line 116: Line 124:
     boolean     isLockedForThisThread = true;     boolean     isLockedForThisThread = true;
     synchronized(this){     synchronized(this){
-        waitingThreads.add(queueObject);+        waitingThreads.add(queueObject);  // append at the end of the list.
     }     }
  
java/starvation_fairness.1429461231.txt.gz · Last modified: 2015/04/19 15:33 (external edit)