User Tools

Site Tools


java:synchronization

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:synchronization [2017/03/19 18:27] gthanosjava:synchronization [2018/03/08 09:26] (current) – [Αντιμετωπίζοντας την ασάφεια στις τιμές των μεταβλητών] gthanos
Line 23: Line 23:
     }     }
  
-} 
- 
-class Counter { 
-  private int c = 0; 
-  public void increment() { c++; } 
-  public void decrement() {  c--; } 
-  public int value() { 
-    return c; 
-  } 
 } }
 </code> </code>
Line 48: Line 39:
   - το νήμα B αποθηκεύει την τιμή της c   - το νήμα B αποθηκεύει την τιμή της c
  
-Μετά από το παραπάνω σενάριο η τιμή της c θα έπρεπε να παραμένει και πάλι μηδέν καθώς το ένα νήμα την αύξησε και το άλλο την μείωσε. Αντί για αυτό η τιμή της c είναι -1 καθώς η μεταβολή από το νήμα Α στην πράξη δεν έγινε. Για να ήταν μεταβληθεί σωστά η τιμή της c η παραπάνω ακολουθία θα έπρεπε να είναι η εξής+Μετά από το παραπάνω σενάριο η τιμή της c θα έπρεπε να παραμένει και πάλι μηδέν καθώς το ένα νήμα την αύξησε και το άλλο την μείωσε. Αντί για αυτό η τιμή της c είναι -1 καθώς η μεταβολή από το νήμα Α στην πράξη δεν έγινε. Για να μεταβληθεί σωστά η τιμή της c η παραπάνω ακολουθία θα έπρεπε να είναι η εξής
   - το νήμα Α λαμβάνει την τιμή της c   - το νήμα Α λαμβάνει την τιμή της c
   - το νήμα Α αυξάνει την τιμή της c κατά 1   - το νήμα Α αυξάνει την τιμή της c κατά 1
Line 91: Line 82:
  
 Προκειμένου να αντιμετωπιστεί η ασάφεια στις τιμές των μεταβλητών κάθε κρίσιμο τμήμα κώδικα (δηλαδή το τμήμα του κώδικα που περιέχει πιθανή ασάφεια) θα πρέπει να εκτελείται κάθε φορά μόνο από ένα νήμα. Προκειμένου να εκτελείται μόνο ένα νήμα σε συγκεκριμένα τμήματα κώδικα θα χρειαστείτε την εισαγωγή συγχρονισμένων μεθόδων ή blocks την οποία θα δούμε στη συνέχεια. Προκειμένου να αντιμετωπιστεί η ασάφεια στις τιμές των μεταβλητών κάθε κρίσιμο τμήμα κώδικα (δηλαδή το τμήμα του κώδικα που περιέχει πιθανή ασάφεια) θα πρέπει να εκτελείται κάθε φορά μόνο από ένα νήμα. Προκειμένου να εκτελείται μόνο ένα νήμα σε συγκεκριμένα τμήματα κώδικα θα χρειαστείτε την εισαγωγή συγχρονισμένων μεθόδων ή blocks την οποία θα δούμε στη συνέχεια.
 +
 +|Προηγούμενο: [[:java:concurrency_intro | Ταυτόχρονος προγραμματισμός με χρήση νημάτων  ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:thread_memory_model| Το μοντέλο μνήμης της Java ]]|
 +
  
  
  
java/synchronization.1489948045.txt.gz · Last modified: 2017/03/19 18:27 (external edit)