Sobes.tech
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++;
    }
}

Αυτή η προσέγγιση διασφαλίζει ότι μόνο ένα νήμα τροποποιεί τη μεταβλητή σε κάθε χρονική στιγμή.