Sobes.tech
Junior — Middle

Εξηγήστε τι είναι το AutoResetEvent και πώς χρησιμοποιείται για τον συγχρονισμό νημάτων στο .NET.

sobes.tech AI

Απάντηση από AI

Το AutoResetEvent είναι μια κλάση στο .NET που χρησιμοποιείται για συγχρονισμό νημάτων. Αντιπροσωπεύει ένα γεγονός που επαναφέρει αυτόματα σε μη-σηματοδοτημένη κατάσταση αφού ένα αναμένον νήμα έχει ξεμπλοκαριστεί.

Αρχή λειτουργίας:

  • Αρχικά, το AutoResetEvent βρίσκεται σε κατάσταση σηματοδοτημένο (set) ή μη-σηματοδοτημένο (reset).
  • Αν ένα νήμα καλέσει τη μέθοδο WaitOne() και το γεγονός βρίσκεται σε κατάσταση σηματοδοτημένο, το νήμα συνεχίζει και το γεγονός μεταβαίνει αυτόματα σε μη-σηματοδοτημένη κατάσταση.
  • Αν το γεγονός βρίσκεται σε κατάσταση μη-σηματοδοτημένο, το νήμα μπλοκάρεται μέχρι κάποιος να καλέσει το Set(), που θέτει το γεγονός σε κατάσταση σηματοδοτημένο.

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

Παράδειγμα χρήσης:

AutoResetEvent autoEvent = new AutoResetEvent(false);

void Worker()
{
    Console.WriteLine("Αναμονή σήματος...");
    autoEvent.WaitOne(); // Αναμονή για σήμα
    Console.WriteLine("Σήμα λήφθηκε, η εργασία συνεχίζεται.");
}

// Σε άλλο νήμα
void Signaler()
{
    Thread.Sleep(1000); // Προσομοίωση εργασίας
    autoEvent.Set(); // Αποστολή σήματος σε ένα αναμένον νήμα
}