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

Άποψη: 20027|Απάντηση: 0

[Πηγή] Η λέξη-κλειδί κλειδώματος C# επισημαίνει ένα μπλοκ εντολών ως κρίσιμη περιοχή λαμβάνοντας ένα mutex για ένα δεδομένο αντικείμενο, εκτελώντας τη δήλωση, αλλά...

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 31/12/2015 5:51:01 μ.μ. | | |
Η λέξη-κλειδί κλειδώματος επισημαίνει ένα μπλοκ εντολών ως κρίσιμη ζώνη παίρνοντας ένα mutex για ένα δεδομένο αντικείμενο, εκτελώντας τη δήλωση και, στη συνέχεια, απελευθερώνοντας το κλείδωμα.

Η δήλωση κλειδώματος χρησιμοποιεί βασικά το Monitor.Enter και το Monitor.Exit, δηλαδή, το Monitor.Enter(αυτό) εκτελείται όταν εκτελείται το κλείδωμα(αυτό) και το Monitor.Exit(αυτό) εκτελείται στο τέλος του σγουρού στηρίγματος. Ποια είναι η σημασία του, για οποιοδήποτε αντικείμενο, το πρώτο μέρος της μνήμης είναι η διεύθυνση όλων των μεθόδων και το δεύτερο μέρος είναι ένα ευρετήριο. Δείχνει ένα SyncBlock στην περιοχή SyncBlock Cache του CLR. Τι σημαίνει αυτό? Δηλαδή, όταν εκτελείτε το Monitor.Enter(Object), εάν η τιμή ευρετηρίου του αντικειμένου είναι αρνητική, επιλέξτε ένα SyncBlock από το SyncBlock Cache και τοποθετήστε τη διεύθυνσή του στο ευρετήριο του αντικειμένου. Αυτό ολοκληρώνει το κλείδωμα που επισημαίνεται από το αντικείμενο και τα άλλα νήματα θέλουν να εκτελέσουν ξανά τη λειτουργία Monitor.Enter(object), η οποία θα λάβει ένα ευρετήριο με ένα θετικό αντικείμενο και, στη συνέχεια, θα περιμένει. Μέχρι ο δείκτης να γίνει αρνητικός, δηλαδή το νήμα χρησιμοποιεί το Monitor.Exit(object) για να μετατρέψει τον δείκτη σε αρνητικό.

Τι πρέπει να προσέξετε όταν χρησιμοποιείτε την κλειδαριά:
1.Το κλείδωμα δεν μπορεί να κλειδώσει την τιμή null Ένα αντικείμενο μπορεί να δείχνει σε null, αλλά το null δεν χρειάζεται να απελευθερωθεί. (Δείτε επίσης: Κατανόηση του Full Null)
2.Το κλείδωμα δεν μπορεί να κλειδώσει τον τύπο συμβολοσειράς, αν και είναι επίσης τύπος αναφοράς. Επειδή ο τύπος συμβολοσειράς "αιωρείται" από το CLR
Αυτό σημαίνει ότι υπάρχει μόνο μία παρουσία οποιασδήποτε δεδομένης συμβολοσειράς σε ολόκληρο το πρόγραμμα και το ίδιο αντικείμενο αντιπροσωπεύει αυτό το κείμενο σε όλα τα νήματα όλων των τομέων εφαρμογών που εκτελούνται. Επομένως, εφόσον τοποθετείται ένα κλείδωμα σε μια συμβολοσειρά με το ίδιο περιεχόμενο οπουδήποτε στη διαδικασία εφαρμογής, όλες οι παρουσίες αυτής της συμβολοσειράς στην εφαρμογή θα κλειδωθούν. Επομένως, είναι καλύτερο να κλειδώνετε ιδιωτικά ή προστατευόμενα μέλη που δεν θα διατηρηθούν.
3.locklock το αντικείμενο είναι το όριο μνήμης ενός μπλοκ προγράμματος
4. Ο τύπος τιμής δεν μπορεί να κλειδωθεί, επειδή το "αντικείμενο απελευθερώνεται" με κόκκινο χρώμα στο προηγούμενο κείμενο και ο τύπος τιμής δεν είναι τύπος αναφοράς
5. Το κλείδωμα αποφεύγει το κλείδωμα δημόσιων τύπων ή αντικειμένων που δεν ελέγχονται από το πρόγραμμα.
Για παράδειγμα, εάν η παρουσία είναι δημόσια προσβάσιμη, το lock(this) μπορεί να είναι προβληματικό επειδή ο μη ελεγχόμενος κώδικας μπορεί επίσης να κλειδώσει το αντικείμενο. Αυτό μπορεί να οδηγήσει σε αδιέξοδα, όπου δύο ή περισσότερα νήματα περιμένουν να απελευθερώσουν το ίδιο αντικείμενο. Το κλείδωμα δημόσιων τύπων δεδομένων (σε αντίθεση με αντικείμενα) μπορεί επίσης να προκαλέσει προβλήματα για τον ίδιο λόγο.
Όταν χρησιμοποιείτε το lock(this), η τιμή της μεταβλητής μέλους κλάσης μπορεί να αλλάξει με τη μέθοδο που δεν βρίσκεται στην κρίσιμη ζώνη

Σενάριο εφαρμογής: Συχνά χρησιμοποιείται για την αποτροπή αβέβαιων εξαιρέσεων στην τιμή των δημόσιων μεταβλητών που προκαλούνται από λειτουργίες πολλαπλών νημάτων για τη διασφάλιση της ασφάλειας των λειτουργιών









Προηγούμενος:Το Win8 ξεκινά την υπηρεσία SQL Server 2012
Επόμενος:[Ταχύτητα] Σαρωτής ανοιχτής θύρας τμήματος IP για γρήγορη ταχύτητα σάρωσης!!
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com