11.09.2024
Effizient Implementiert
Thread-Safe Singleton in C#
Autor: Online Redaktion
EMGenie
Das Singleton Pattern, eines der bekanntesten Muster in der Softwareentwicklung, lässt sich auch Thread-Safe umsetzen. Wie das geht, zeigt ein Artikel auf CodeProject.
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.
Neuer Ansatz für ML
Die erste Regel des maschinellen Lernens - beginnen Sie ohne maschinelles Lernen
Eugene Yan erklärt, warum es sinnvoll ist, Probleme zuerst ohne maschinelles Lernen zu lösen und welche einfachen Ansätze oft effektiver sein können.
>>
Webentwicklung
Welches Web-Framework ist das passende? Ein Experiment
Entwickler Eugene Yan untersucht in einem Praxisbeispiel, wie unterschiedliche Web-Frameworks die Entwicklung einer Anwendungen beeinflussen. Am Start sind FastHTML, Next.js und SvelteKit.
>>
Effizient Implementiert
Thread-Safe Singleton in C#
Das Singleton Pattern, eines der bekanntesten Muster in der Softwareentwicklung, lässt sich auch Thread-Safe umsetzen. Wie das geht, zeigt ein Artikel auf CodeProject.
>>
Microsoft Office
Office Add-ins Development Kit für Visual Studio Code
Microsoft hat das Office Add-ins Development Kit für Visual Studio Code als Preview veröffentlicht. Es soll die Einrichtung der Entwicklungsumgebung vereinfachen.
>>