Sicherheit der Ereignisverteilung in Multithread-Umgebungen
Bei der Verwendung von Ereignissen in Multithread-Anwendungen ist es wichtig, die Thread-Sicherheit zu gewährleisten, um dies zu vermeiden mögliche Rennbedingungen. Ein gängiger Ansatz für die Ereignisverteilung besteht darin, zu prüfen, ob ein Ereignis null ist, bevor es aufgerufen wird. Dies wirft jedoch die Frage auf:
Kann ein anderer Thread die Ereignisaufrufliste zwischen der Nullprüfung und dem Ereignisaufruf ändern?
Um dieses Problem zu beheben, bedarf es einer robusteren Die Lösung besteht darin, das folgende Muster zu verwenden:
protected virtual void OnSomeEvent(EventArgs args) { EventHandler ev = SomeEvent; if (ev != null) ev(this, args); }
Diese Technik funktioniert, weil:
Diese Lösung behandelt zwar das Szenario von Nullereignissen, berücksichtigt jedoch nicht die Möglichkeit nicht mehr funktionierender Ereignishandler oder Ereignisse Abonnements nach Abnahme der Kopie. Umfassendere Lösungen und weitere Diskussionen finden Sie in den bereitgestellten externen Ressourcen.
Darüber hinaus stellt Krzysztofs Lösung, wie in der Antwort beschrieben, in C# 6.0 eine praktikable Alternative dar.
Das obige ist der detaillierte Inhalt vonKönnen beim Versenden von Ereignissen in .NET-Anwendungen mit mehreren Threads Thread-Sicherheitsprobleme auftreten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!