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

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

[Επικοινωνία] Λεπτομερής επεξήγηση του AutoResetEvent σε .net/c#

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 20/3/2018 1:19:01 μ.μ. | | |

έννοιες που σχετίζονται με νήματα
1. Συγχρονισμός νήματος
Χειροκίνητη επαναφορά συμβάντος
Η μέθοδος Set() ορίζει την κατάσταση σε Signaled
Reset() για να το ρυθμίσετε σε κανένα σήμα
Το WaitOne() θα μπλοκάρει μέχρι να έχει σήμα και εάν υπάρχει σήμα τη στιγμή της κλήσης του WaitOne, δεν θα μπλοκάρει
Αυτόματη επαναφορά συμβάντος
Η διαφορά από το ManualResetEvent είναι ότι το AutoResetEvent.WaitOne() αλλάζει αυτόματα την κατάσταση του αντικειμένου συμβάντος, δηλαδή η κατάσταση του συμβάντος αλλάζει κάθε φορά που εκτελείται το AutoResetEvent.WaitOne(). Σήμα - > χωρίς σήμα, Χωρίς σήμα – > έχει σήμα
example:


  
myResetEven.Set(), η οποία είναι στην πραγματικότητα ισοδύναμη με έναν διακόπτη, εάν η μέθοδος set() δεν εκτελεστεί, η ακόλουθη waitOne() δεν θα μπορεί να περιμένει την ειδοποίηση για να την αφήσει να εκτελεστεί, έτσι ώστε η δήλωση μετά το waitOne να μην εκτελεστεί.
Μέθοδος παρακολούθησης
Ο μηχανισμός Wait() Pulse() χρησιμοποιείται για αλληλεπίδραση μεταξύ νημάτων, όταν ένα αντικείμενο εκπέμπει Monitor.Wait(), το νήμα που έχει πρόσβαση στο αντικείμενο θα παραμείνει σε κατάσταση αναμονής. μέχρι να πάρει σήμα αφύπνισης. Το Monitor.Pulse() χρησιμοποιείται για την αποστολή σημάτων στο νήμα αναμονής.
Δηλαδή, στην κρίσιμη περιοχή μεταξύ Monitor.Enter() και Monitor.Exit(), για να απελευθερώσετε το κλείδωμα στο αντικείμενο και να αποκλείσετε το τρέχον νήμα, βρίσκεται σε κατάσταση αναμονής στην ουρά.

Η κλειδαριά είναι διαφορετική από τη Mutex
Κλείδωμα συγχρονισμού μεταξύ πολλαπλών νημάτων
Συγχρονισμός πολλαπλών νημάτων μεταξύ διεργασιών Mutex ή συγχρονισμός πολλαπλών διεργασιών
Στον προγραμματισμό πολλαπλών νημάτων .Net, χρησιμοποιούνται συχνά οι AutoResetEvent και ManualResetEvent και η χρήση τους είναι πολύ παρόμοια, αλλά υπάρχουν διαφορές. Η μέθοδος Set θέτει το σήμα στην κατάσταση αποστολής, η μέθοδος Reset θέτει το σήμα στην κατάσταση μη αποστολής και το WaitOne περιμένει να σταλεί το σήμα. Η αρχική κατάσταση του κατασκευαστή μπορεί να προσδιοριστεί από την τιμή της παραμέτρου, εάν είναι αληθής, δεν μπλοκάρει και false είναι η κατάσταση αποκλεισμού. Εάν ένα νήμα καλέσει τη μέθοδο WaitOne, το νήμα λαμβάνει το σήμα όταν βρίσκεται σε κατάσταση αποστολής και συνεχίζει να εκτελείται προς τα κάτω. Η διαφορά είναι ότι μετά την κλήση, το AutoResetEvent.WaitOne() επιτρέπει την είσοδο μόνο ενός νήματος κάθε φορά και όταν ένα νήμα λαμβάνει σήμα, το AutoResetEvent θα θέσει αυτόματα το σήμα σε κατάσταση μη αποστολής και τα άλλα νήματα που καλούν το WaitOne μπορούν μόνο να συνεχίσουν να περιμένουν. Δηλαδή, το AutoResetEvent ξυπνά μόνο ένα νήμα κάθε φορά. Το ManualResetEvent μπορεί να ξυπνήσει πολλά νήματα, επειδή όταν ένα νήμα καλεί τη μέθοδο ManualResetEvent.Set(), τα άλλα νήματα που καλούν το WaitOne λαμβάνουν το σήμα για να συνεχίσουν την εκτέλεση και το ManualResetEvent δεν ορίζει αυτόματα το σήμα ώστε να μην αποστέλλεται. Με άλλα λόγια, εκτός εάν η μέθοδος ManualResetEvent.Reset() καλείται χειροκίνητα, το ManualResetEvent θα παραμείνει σηματοδοτημένο και το ManualResetEvent μπορεί να ξυπνήσει πολλά νήματα ταυτόχρονα για να συνεχίσει την εκτέλεση.




Προηγούμενος:.har εργαλείο ανάλυσης αρχείων και HARViewer
Επόμενος:Εφαρμογή κατανεμημένης κλειδαριάς Zookeeper
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com