Anzeige
Anzeige
Anzeige
Anzeige
Lesedauer 3 Min.

Thread-Safe Singleton in C#

Das Singleton Pattern lässt sich auch Thread Safe umsetzen. Wie das geht, zeigt ein Artikel.
Das Singleton Pattern stellt sicher, dass eine Klasse programmweit nur einmal instanziert werden kann. Es ist besonders nützlich bei Konfigurationsmanagern oder Protokollierungssystemen. Es gibt mehrere Arten, das umzusetzen. Z#um Beispiel so: public sealed class Singleton{    private static Singleton instance = null;    private Singleton() { }    public static Singleton Instance {        get {            if (instance == null) {                instance = new Singleton();            }            return instance;        }    }
}Aber wie der Autor auf https://csharpindepth.com/articles/Singleton schreibt, sollte man das so nicht einsetzen. Denn der Code ist nicht thread-safe. Ein anderer Thread könnte also zu bestimmten Zeiten eine weitere Instanz erzeugen. Damit dies nicht passiert, muss man den Code thread-safe machen. Wie das geht, zeigt ein Artikel auf CodeProject und zwar sowohl im klassischen doppelt geprüften Locking-Ansatz als auch mithilfe der modernen Lazy<T>-Methode.Die klassische Technik des doppelten Lockings minimiert den Performance-Overhead, indem sie nur beim ersten Zugriff auf die Instanz eine Sperre anwendet. Angesichts der Schwierigkeiten, die mit Multithreading-sicheren Implementierungen verbunden sind, ist diese Methode äußerst hilfreich.Im Gegensatz dazu ermöglicht die Lazy<T>-Klasse, die in C# 4.0 eingeführt wurde, eine noch einfachere und sicherere Implementierung. Diese Methode regelt die Thread-Sicherheit und verzögert die Instanzierung, bis die Instanz tatsächlich benötigt wird. Diese Techniken sind nicht nur für Entwickler im Bereich C# von Bedeutung, sondern bieten wertvolle Einsichten für jeden, der mit der Softwareerstellung in einer multithreaded Umgebung arbeitet.Abschließend ist es wichtig zu beachten, dass während Lazy<T> die bevorzugte Methode für die meisten modernen Anwendungen ist, Szenarien existieren, in denen die Flexibilität des doppelten Lockings vorteilhaft sein kann, insbesondere wenn dynamische Parameter zur Instanzierung benötigt werden. Die Wahl zwischen diesen Ansätzen sollte auf den spezifischen Anforderungen der Anwendung basieren.Weitere Informationen
Miscellaneous

Neueste Beiträge

BRIN-Indizes in PostgreSQL - Indizes & Co. in PostgreSQL, Teil 4
PostgreSQL mit BRIN vertritt die Idee, dass ein Index unvollkommen sein kann, solange er kostengünstig und in großem Maßstab effektiv ist. So entsteht eine pragmatische Optimierung, die Präzision gegen Einfachheit eintauscht – und dabei gewinnt.
6 Minuten
SignalRC WebRTC - Der DDC-Truck, Teil 3
WebRTC ist als Tool ideal geeignet, um Videodaten von RC-Modellen in Echtzeit zu übertragen.
7 Minuten
Räumliche Daten mit PostGIS in PostgreSQL - Indizes & Co. in PostgreSQL, Teil 5
Funktionen wie generierte Spalten, LATERAL-Joins und indexbewusste Operatoren ermöglichen in PostGIS räumliche Abfragen, die auch bei zunehmender Komplexität deklarativ, lesbar und performant bleiben.
6 Minuten

Das könnte Dich auch interessieren

Elektronische Schaltkreise im Browser simulieren - Simulation
Statt mit Steckfeld oder Lötkolben kann man auf dieser Website Schaltungen per Drag and Drop zusammenstellen und deren Verhalten testen.
2 Minuten
26. Jul 2018
UIs für Linux - Bedienoberflächen entwickeln mithilfe von C#, .NET und Avalonia
Es gibt viele UI-Frameworks für .NET, doch nur sehr wenige davon unterstützen Linux. Avalonia schafft als etabliertes Open-Source-Projekt Abhilfe.
16 Minuten
16. Jun 2025
C#-.NET-Apps mit WinUI 3 - Komponentenbasierte Apps mit Fluent/FAST, Teil 3
Microsoft macht mit WinUI 3 ein natives User-Experience-Framework für Windows verfügbar, dessen Komponenten auf dem Microsoft-eigenen Design-System Fluent 2 basieren.
23 Minuten
13. Mai 2024
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige