This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
|
java:synchronization [2017/03/19 18:27] gthanos |
java:synchronization [2017/03/19 18:33] gthanos [Παράδειγμα ασάφειας στις τιμές διαμοιραζόμενων μεταβλητών παράλληλα εκτελούμενων νημάτων] |
||
|---|---|---|---|
| Line 23: | Line 23: | ||
| } | } | ||
| - | } | ||
| - | |||
| - | class Counter { | ||
| - | private int c = 0; | ||
| - | public void increment() { c++; } | ||
| - | public void decrement() { c--; } | ||
| - | public int value() { | ||
| - | return c; | ||
| - | } | ||
| } | } | ||
| </ | </ | ||
| Line 48: | Line 39: | ||
| - το νήμα B αποθηκεύει την τιμή της c | - το νήμα B αποθηκεύει την τιμή της c | ||
| - | Μετά από το παραπάνω σενάριο η τιμή της c θα έπρεπε να παραμένει και πάλι μηδέν καθώς το ένα νήμα την αύξησε και το άλλο την μείωσε. Αντί για αυτό η τιμή της c είναι -1 καθώς η μεταβολή από το νήμα Α στην πράξη δεν έγινε. Για να ήταν | + | Μετά από το παραπάνω σενάριο η τιμή της c θα έπρεπε να παραμένει και πάλι μηδέν καθώς το ένα νήμα την αύξησε και το άλλο την μείωσε. Αντί για αυτό η τιμή της c είναι -1 καθώς η μεταβολή από το νήμα Α στην πράξη δεν έγινε. Για να μεταβληθεί σωστά η τιμή της c η παραπάνω ακολουθία θα έπρεπε να είναι η εξής |
| - το νήμα Α λαμβάνει την τιμή της c | - το νήμα Α λαμβάνει την τιμή της c | ||
| - το νήμα Α αυξάνει την τιμή της c κατά 1 | - το νήμα Α αυξάνει την τιμή της c κατά 1 | ||