Junior — Middle
Μπορεί να μεταδοθεί ένα αντικείμενο τύπου string ως μηχανισμός κλειδώματος συγχρονισμού;
sobes.tech AI
Απάντηση από AI
Δεν συνιστάται η χρήση ενός αντικειμένου τύπου string ως μηχανισμού κλειδώματος (lock) στη C#. Ο λόγος είναι ότι οι συμβολοσειρές είναι αμετάβλητα και εσωτερικά (interned) αντικείμενα, δηλαδή οι ίδιες λογοτεχνικές συμβολοσειρές μπορούν να αναφέρονται στο ίδιο αντικείμενο στη μνήμη.
Αυτό μπορεί να οδηγήσει σε απροσδόκητα μπλοκαρίσματα αν διαφορετικά μέρη του προγράμματος χρησιμοποιούν τις ίδιες τιμές συμβολοσειράς για συγχρονισμό, δημιουργώντας αδιέξοδα ή μειώνοντας την απόδοση.
Είναι καλύτερο να χρησιμοποιείτε ένα ιδιωτικό αντικείμενο, ειδικά διατεθειμένο για το κλείδωμα:
private readonly object _lockObj = new object();
public void SomeMethod()
{
lock(_lockObj)
{
// κρίσιμη ενότητα
}
}