Nehmen Sie den folgenden Code, was in einer Multithread-Umgebung passiert:
%Vor%In einer Multithread-Umgebung kann auf diese Methode und Eigenschaft gleichzeitig von verschiedenen Threads zugegriffen werden.
Ist es threadsicher, einer statischen Variable, auf die in verschiedenen Threads zugegriffen werden kann, ein neues Objekt zuzuordnen? Was kann schiefgehen?
Gibt es einen Zeitpunkt, zu dem Ereignisse null sein können? Wenn 2 Threads gleichzeitig Events
und ResetDictionary()
aufrufen,
Ist es threadsicher, ein neues Objekt einer statischen Variable zuzuweisen, auf die in verschiedenen Threads zugegriffen werden kann?
Grundsätzlich ja. In dem Sinne, dass die Eigenschaft nie ungültig sein wird oder null
.
Was kann schiefgehen?
Ein Lese-Thread kann weiterhin das alte Wörterbuch verwenden, nachdem ein anderer Thread es zurückgesetzt hat. Wie schlimm das ist, hängt ganz von Ihrer Programmlogik und Ihren Anforderungen ab.
Wenn Sie alles in einer Multithreading-Umgebung steuern möchten, müssen Sie ein Flag verwenden, auf das alle Stufen zugreifen können, und die Methoden steuern, die Sie in Ihrem Wörterbuch verwenden!
%Vor%eine andere Sache! Sie können die Invoke-Methode verwenden, um sicherzustellen, dass ein Thread eine Variable manipuliert oder eine Funktion in einem anderen Thread aufruft. siehe den Link: Sauberste Möglichkeit, Cross-Thread-Ereignisse aufzurufen
Tags und Links c# thread-safety