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

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

[Πηγή] Ασφάλεια σπειρώματος C# με κλειδαριά

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 13/6/2016 5:26:25 μ.μ. | | |

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

Ο σκοπός του κλειδώματος είναι να αποτρέψει τις ταυτόχρονες λειτουργίες κατά την εκτέλεση πολλαπλών νημάτων και τα αντικείμενα του τύπου αναφοράς κλειδώματος επιτρέπουν μόνο ένα νήμα να λειτουργεί κάθε φορά στην κλειδωμένη περιοχή του.

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




Υπάρχει διαφορά μεταξύ των αποτελεσμάτων του τρεξίματος με και χωρίς κλείδωμα:

Μετά το κλείδωμα: η τιμή του i θα μειωθεί ένα προς ένα, δεν θα υπάρχουν άλματα, δεν θα υπάρχει επαναλαμβανόμενη έξοδος, μέχρι την τιμή 0.

Χωρίς κλείδωμα: η έξοδος τιμής του i θα μεταπηδήσει, η ασυνεχής μείωση και μπορεί επίσης να έχει έξοδο τιμής -1.

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




Προηγούμενος:Ο χρήστης ακυρώθηκε από τον διάλογο αποθήκευσης (MS Visual Database Tools)
Επόμενος:Μια ωραία κλάση DBHelper που εκτελεί αποθηκευμένες διαδικασίες
Δημοσιεύτηκε στις 14/6/2016 10:53:36 π.μ. |
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 10/2/2022 9:18:58 π.μ. |
Το .NET/C# Lock Principle Monitor παρέχει μια εις βάθος εξήγηση
https://www.itsvse.com/thread-9633-1-1.html
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com