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

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

[Πηγή] κλειδαριά Γιατί μπορεί να κλειδώσει μόνο την αναφορά αλλά όχι τον τύπο τιμής

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 8/12/2016 10:43:37 π.μ. | | |

Εάν μεταβιβάσετε έναν τύπο τιμής, θα τοποθετηθεί σε πλαίσιο και την επόμενη φορά που θα εκτελεστεί ο κώδικας εδώ, θα τοποθετηθεί ξανά σε πλαίσιο και δεν θα είναι το ίδιο αντικείμενο δύο φορές, επομένως δεν μπορεί να κλειδωθεί



κλειδαριά (x)
{
  ...
}

Το κλείδωμα γίνεται στην πραγματικότητα μέσω του αντικειμένου Monitor:

Τα παραπάνω ισοδυναμούν με:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
Δοκιμάστε
{
  ...   
}
τελικά
{
  System.Threading.Monitor.Exit(obj);
}

Στη συνέχεια, για να παραθέσω τα αρχικά λόγια του MSDN:
Χρησιμοποιήστε το Monitor για να κλειδώσετε αντικείμενα (δηλαδή, τύπους αναφοράς) και όχι τύπους τιμών. Όταν μεταβιβάζετε μια μεταβλητή τύπου τιμής στο Enter, τοποθετείται σε πλαίσιο ως αντικείμενο. Εάν περάσετε ξανά την ίδια μεταβλητή στο Enter, εγκιβωτίζεται ως ξεχωριστό αντικείμενο και το νήμα δεν μπλοκάρει. Σε αυτήν την περίπτωση, ο κώδικας που υποτίθεται ότι προστατεύει το Monitor δεν προστατεύεται. Επιπλέον, όταν περνάτε τη μεταβλητή στο Exit, δημιουργείται ένα άλλο ξεχωριστό αντικείμενο. Επειδή το αντικείμενο που μεταβιβάζεται στο Exit είναι διαφορετικό από το αντικείμενο που μεταβιβάζεται στο Enter, το Monitor ρίχνει το SynchronizationLockException. Για περισσότερες πληροφορίες, ανατρέξτε στο εννοιολογικό θέμα Οθόνες.




Προηγούμενος:Αναβαθμίστε την Python 2.6.6 σε 2.7.5 στο σύστημα Centos 6.4
Επόμενος:Διαφορά μεταξύ Directory.GetCurrentDirectory και Application.StartupPath
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com