Junior — Middle
Πώς διαχειρίζονται τα συστήματα την κατάσταση όταν πολλά νήματα προσπελαύνουν ταυτόχρονα μια κοινή μεταβλητή ή κατάσταση;
sobes.tech AI
Απάντηση από AI
Όταν πολλαπλά νήματα προσπελαύνουν ταυτόχρονα μια κοινή μεταβλητή ή κατάσταση, προκύπτει το πρόβλημα του ανταγωνισμού (race condition). Για να αποφευχθούν λανθασμένα δεδομένα και να διασφαλιστεί η ορθότητα, χρησιμοποιούνται μηχανισμοί συγχρονισμού:
- Κλειδώματα (lock, mutex) — επιτρέπουν σε ένα νήμα να κατέχει αποκλειστικά τον πόρο, ενώ τα άλλα περιμένουν.
- Επιτηρητές (Monitor.Enter/Exit σε C#) — πιο ευέλικτος μηχανισμός κλειδώματος.
- Λέξη-κλειδί
lockσε C# — απλοποιημένη σύνταξη για επιτηρητές. - Ατομικές λειτουργίες (Interlocked) — για απλές λειτουργίες χωρίς πλήρη κλειδώματα.
- Συγχρονισμένες συλλογές — δομές δεδομένων ασφαλείς για πολλαπλά νήματα.
Παράδειγμα με lock σε C#:
private readonly object _sync = new object();
private int _counter = 0;
public void Increment()
{
lock(_sync)
{
_counter++;
}
}
Αυτή η προσέγγιση διασφαλίζει ότι μόνο ένα νήμα τροποποιεί τη μεταβλητή σε κάθε χρονική στιγμή.