Sobes.tech
Middle

Τι είναι τα lock-ers σε C#;

sobes.tech AI

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

lock στην C# χρησιμοποιείται για την εξασφάλιση αποκλειστικής πρόσβασης σε ένα μπλοκ κώδικα. Διασφαλίζει ότι μόνο ένα νήμα μπορεί να εκτελέσει αυτό το μπλοκ ταυτόχρονα, αποτρέποντας καταστάσεις αγώνα (race conditions) κατά την εργασία με κοινόχρηστους πόρους.

private static readonly object _lockObject = new object(); // Αντικείμενο για συγχρονισμό

public void AccessSharedResource()
{
    lock (_lockObject) // Κλείδωμα του αντικειμένου
    {
        // Κρίσιμη ενότητα: κώδικας που απαιτεί αποκλειστική πρόσβαση
        // Εργασία με κοινόχρηστο πόρο (π.χ. τροποποίηση μιας μεταβλητής)
    } // Το κλείδωμα απελευθερώνεται αυτόματα κατά την έξοδο από το μπλοκ
}

Εναλλακτικές και συναφή έννοιες:

  • Monitor: Παρέχει πιο λεπτομερή έλεγχο πάνω στον συγχρονισμό, συμπεριλαμβανομένων των μεθόδων Wait, Pulse, PulseAll.
  • Mutex: Χρησιμοποιείται για συγχρονισμό μεταξύ διεργασιών, καθώς και μεταξύ νημάτων μέσα στην ίδια διεργασία.
  • Semaphore/SemaphoreSlim: Περιορίζει τον αριθμό των νημάτων που μπορούν ταυτόχρονα να έχουν πρόσβαση σε έναν πόρο.
  • ReaderWriterLockSlim: Επιτρέπει σε πολλά νήματα να διαβάζουν ταυτόχρονα, αλλά μόνο σε ένα να γράφει.

Η επιλογή του μηχανισμού κλειδώματος εξαρτάται από την συγκεκριμένη εργασία συγχρονισμού. Το lock είναι μια σύντομη μορφή χρήσης του Monitor.Enter και Monitor.Exit και είναι κατάλληλο για τις περισσότερες απλές περιπτώσεις συγχρονισμού εντός μιας ίδιας διεργασίας.