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

Άποψη: 2976|Απάντηση: 2

[Πηγή] Πώς το Lazy in C# διατηρεί τα νήματα ασφαλή

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2/7/2023 9:41:55 μ.μ. | | |
Μετά το .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 στον εγγενή κώδικα, είναι ένα βαρύ κλείδωμα

ΟθόνηΥποστηρίζεται η ουρά και ο ύπνος νήματος, γεγονός που μπορεί να διασφαλίσει ότι ολόκληρο το μπλοκ μεθόδου εκτελείται σε κατάσταση μονού νήματος


Αρχικός σύνδεσμος:Η σύνδεση με υπερσύνδεσμο είναι ορατή.




Προηγούμενος:ASP.NET τη διαφορά μεταξύ ThreadStatic, CallContext και HttpContext
Επόμενος:Ο SQL Server υποβάλλει ερώτημα για τον τρέχοντα αριθμό συνδέσεων στη βάση δεδομένων
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2/7/2023 9:42:16 μ.μ. |
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 4/7/2023 7:19:45 μ.μ. |
Βελτιστοποίηση απόδοσης C#: Το Lazy αρχικοποιεί το Lazy<T> με καθυστέρηση
https://www.itsvse.com/thread-7700-1-1.html
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com