2008-12-01 3 views
7

Ich habe eine ASP.NET-Webseite unter IIS ausgeführt, die eine allgemeine Assembly verwendet, die eine Singleton-Klasse enthält. Soll ich den Singleton mit einem Verriegelungsmechanismus versehen, um ihn threadsicher zu machen? Oder wird eine Verbindung zum Webserver dieselbe Instanz des Singletons verwenden?Sind Singleton-Klassen in IIS Thread-sicher?

Hoffentlich frage ich das zusammenhängend.

Antwort

2

Das übliche Muster für .NET-Singletons erstellt eine einzelne Instanz pro App-Domäne. Die übliche Situation in asp.net besteht darin, dass mehrere Threads durch dieselbe App-Domäne laufen. Das bedeutet, dass Sie mehrere Threads gleichzeitig in Ihrem Singleton ausführen können.

Sie müssen das Singleton untersuchen und (nach besten Kräften koffreflektorkoff) bestimmen, ob es threadsicher ist oder nicht. Wenn Sie freigegebene Ressourcen beibehalten und ändern oder wenn Sie eine Art von Status kapseln, der zwischen Methodenaufrufen gespeichert wird, müssen Sie vorsichtig sein.

Sie könnten den Singleton innerhalb eines zweiten Singleton umbrechen, der Sperren verwendet, bevor er seine Aufrufe an denjenigen delegiert, über den Sie keine Kontrolle haben. Auf diese Weise können Sie die Sperrung feiner steuern, anstatt jeden einzelnen Singleton-Aufruf mit einer einzigen Sperre zu blockieren. Es würde Ihnen auch den Vorteil geben, die Position des Einfädelcodes zu zentralisieren ...

2

Wenn es ein statischer Singleton ist ... nein, es ist nicht threadsicher. Es ist geteilt über alle Threads, die diese Instanz der App treffen (so Multi-Anfragen werden es teilen).

Allerdings, was Sie es für verwenden müssen möglicherweise nicht unbedingt Thread-Sicherheit.

0

In .NET ist es möglich, Thread-safe Singleton ohne Sperren zu implementieren.

+0

-1. Die Methoden müssten Sperren haben, wenn dies erforderlich ist. Dieser Link bezieht sich nicht auf diese Details (nur darüber, wie die Singleton-Klasse selbst erstellt wird, nicht ihre Funktionalität). –

+0

+1. Dieser Kommentar verdient nicht -1. In der Tat können die Methoden Sperren benötigen, aber dies ist getrennt von der Implementierung des Singleton-Patterns selbst IMO. – Ben