Μετά το .NET 4.0, παρέχεται ένας ασφαλής τύπος τεμπέλης φόρτωσης στο .NET FrameworkΤεμπέλης Το Lazy είναι σε θέση να λειτουργεί σε περιβάλλον πολλαπλών νημάτων, εγγυημένοGetValueΗ λειτουργία εκτελείται μόνο μία φορά, υλοποιώντας έτσιΛειτουργία Singleton
Στο παρελθόν, χρησιμοποιούσαμε κλειδώματα τετραγωνικής κρίσης για την υλοποίηση μοτίβων singleton ή για τη χρήση στατικών συναρτήσεων αρχικοποίησης κλάσεων Με τον τύπο Lazy, αυτή η διαδικασία απλοποιείται και η απόδοση είναι καλύτερη
Όταν δημιουργείται το Lazy, μπορείτε να καθορίσετε τη λειτουργία εγκατάστασης νήματος, υπάρχουν επί του παρόντος δύο λειτουργίες,Μόνο δημοσίευση,ΕκτέλεσηκαιΔημοσίευση
Λειτουργία μόνο δημοσίευσης
1. Εκτελέστε τη λειτουργία προετοιμασίας και τοποθετήστε την σε ένα εσωτερικόΚουτίπληκτρολογήστε, λύστε το πρόβλημα της κρίσης μηδενικής τιμής, εάν η υπόθεση έχει δημιουργηθεί, θα επιστρέψει null,Η διαδικασία είναι ανασφαλής ως προς το νήμα
2. Προσδιορίστε εάν η m_boxed είναι κενή, m_boxed είναι το πεδίο που αποθηκεύεται κατά τιμή, εάν είναι ίσο με κενό, έχει οριστεί σε κουτί, αυτή η μέθοδος μπορεί να εξασφαλίσει ατομικότητα,Η διαδικασία είναι ασφαλής για νήματα
3. Εάν το CreateValue επιστρέψει κενό, σημαίνει ότι άλλα νήματα έχουν ήδη δημιουργήσει παρουσίες και, στη συνέχεια, έχουν οριστεί σε ήδη δημιουργημένες παρουσίες
4. Επισημάνετε τη μέθοδο προετοιμασίας ως αρχικοποιημένη, η οποία συμβαίνει συνήθως στην περίπτωση ταυτόχρονης εκτέλεσης και εκτελέστε το CreateValue πολλές φορές
Μόνο δημοσίευσηχρησιμοποιείται με βάση τοInterlocked.CompareExchange, αυτή η κλάση περιέχει μεθόδους ατομικότηταςCAS (Σύγκριση και ανταλλαγή)
Το CAS υλοποιείται χρησιμοποιώντας ατομικές εντολές που παρέχονται από την CPU και διαφορετικές εκδόσεις χρόνου εκτέλεσης μπορεί να έχουν διαφορετικές υλοποιήσεις Αλληλένδετη συγκεκριμένη υλοποίηση Στην εγγενή μέθοδο, οι ενδιαφερόμενοι φίλοι μπορούν να ελέγξουν τη συγκεκριμένη υλοποίηση μέσω κώδικα coreclr/jvm
Σε αυτήν τη λειτουργία,Μια συνάρτηση singleton μπορεί να εκτελεστεί πολλές φορές, αλλά στο τέλος είναι εγγυημένο ότι θα ληφθεί μόνο μία παρουσία
Λειτουργία ExcutionAndPublication
ΕκτέλεσηκαιΔημοσίευσηΛειτουργία που χρησιμοποιείται στη λειτουργίαΠτητικό+Οθόνη,ΟθόνηΕίναικλειδαριάΗ υλοποίηση της δήλωσης, η υλοποίηση Monitor στον εγγενή κώδικα, είναι ένα βαρύ κλείδωμα
ΟθόνηΥποστηρίζεται η ουρά και ο ύπνος νήματος, γεγονός που μπορεί να διασφαλίσει ότι ολόκληρο το μπλοκ μεθόδου εκτελείται σε κατάσταση μονού νήματος
Αρχικός σύνδεσμος:Η σύνδεση με υπερσύνδεσμο είναι ορατή. |