Sobes.tech
Junior

Ποιος είναι ο σκοπός της λέξης-κλειδιού lock στη C#;

sobes.tech AI

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

Η λέξη-κλειδί lock χρησιμοποιείται για την εξασφάλιση της ασφάλειας των νημάτων μέσω της δημιουργίας μιας κρίσιμης ενότητας.

Οι κύριοι στόχοι:

  • Μπλοκάρισμα πρόσβασης: Διασφαλίζει ότι μόνο ένα νήμα μπορεί να εκτελέσει τον κώδικα μέσα στο μπλοκ lock σε μια δεδομένη στιγμή.
  • Προστασία κοινών πόρων: Αποτρέπει τις συνθήκες αγώνα όταν πολλά νήματα έχουν ταυτόχρονη πρόσβαση σε δεδομένα ή πόρους, όπως πεδία κλάσης, συλλογές κ.λπ.
  • Συγχρονισμός νημάτων: Χρησιμοποιείται για την οργάνωση της σειράς εκτέλεσης των λειτουργιών σε σενάρια πολλαπλών νημάτων.

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

private static readonly object _lockObject = new object(); // Αντικείμενο κλειδώματος

public void UpdateCounter()
{
    // Αρχή κρίσιμης ενότητας
    lock (_lockObject)
    {
        // Ο κώδικας μέσα σε αυτό το μπλοκ μπορεί να εκτελεστεί μόνο από ένα νήμα κάθε φορά
        counter++;
    }
    // Τέλος κρίσιμης ενότητας
}

Είναι σημαντικό να χρησιμοποιείτε ένα εξειδικευμένο αντικείμενο (_lockObject στο παράδειγμα) για το κλείδωμα, και όχι το this ή το typeof(TypeName), για να αποφύγετε πιθανά προβλήματα αμοιβαίου αποκλεισμού. Συνιστάται η χρήση αντικειμένων τύπου object ή System.Threading.ReaderWriterLockSlim για πιο πολύπλοκα σενάρια.