Starší komentáře ke článku: Používáme návrhové vzory v .NET - Singleton

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: Jaroslav Šnajdr

Datum vložení: 29.3.2005 21:40:26

Stojí za to upozornit, že double-checked locking není úplně korektní technika na multiprocesorových počítačích. Pěkný podrobný popis, který probírá konkrétně .NET a CLI je tento: http://blogs.msdn.com/cbrumme/archive/2003/05/17/51445.aspx Známý článek o podobných problémech v Javě je zde: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html Je to v této chvíli spíše teoretický problém, protože na 32-bitových X86 procesorech i současném Itaniu vše funguje dobře, ale v blízké budoucnosti se to může změnit a je dobré o tom vědět.

Avatar

Autor komentáře: Petr Felzmann

Datum vložení: 1.4.2005 5:29:17

Take bych pridal jeden link, kde jsou diskutovany dalsi mozne implementace singletonu: http://www.yoda.arachsys.com/csharp/singleton.html

Avatar

Autor komentáře: Daniel Steigerwald

Datum vložení: 5.4.2005 2:41:11

http://dotnet.org.za/eduard/archive/2004/07/07/2609.aspx

Avatar

Autor komentáře: Gregor

Datum vložení: 13.4.2005 15:11:03

singleton pre php4: http://files.elepha.info/show.php?show=class/singleton.class.php

Avatar

Autor komentáře: Kolik

Datum vložení: 14.9.2005 9:50:45

Bežne je úplne postačujúca implementácia singletonu v C# táto (pozri odkaz v článku "Implementing Singleton in C#": public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton(){} public static Singleton Instance { get { return instance; } } } Inštanciácia je lazy a je thread-safe.

Avatar

Autor komentáře: Zdeněk Drlík

Datum vložení: 14.9.2005 13:10:12

Ano, implementaci se statickou instanciaci jsem ukazoval v prikladu se sdilenim hlavniho formulare Windows aplikace (http://podklady.interval.cz/drlik/1135/sample2.zip). Thread safe bez diskuze je, nicmene s tim lazy bych byl malinko opatrnejsi - pri pouziti staticke instanciace se vytvoreni instance provede pri nahrani assembly obsahujici tridu do pameti, v pripade pouziti double-checked locking se vytvoreni instance provadi az pri prvnim pristupu k property Instance => neni lazy jako lazy... ;-). Navic touto implementaci kompletne znemoznujete pouziti dedicnosti, coz je IMHO jedna z hlavnich vyhod singletonu oproti pouhym statickym metodam na tride.

Avatar

Autor komentáře: Zdeněk Drlík

Datum vložení: 14.9.2005 14:45:28

Tak s tou inicializaci pri nahrani assembly jsem se zmylil - inicializace statickych clenu se provadi pri prvnim pristupu k statickemu clenu tridy. Takze pokud Singleton nema jiny verejne pristupny staticky clen (metodu, vlastnost apod.), tak v tomto pripade ta inicializace probehne opravdu az pri pristupu k vlastnosti Instance a je to stejne "lazy" jako v pripade pouziti double-checked locking. Pokud by trida mela nejaky jiny staticky clen, tak by pak inicializace sdilene instance probehla driv. Tj. neco jako metoda tridy Singleton: public static void DoSomething() { // } tak inicializace instance probehne i pri volani Singleton.DoSomething().

Avatar

Autor komentáře: Honza

Datum vložení: 20.1.2006 16:22:58

Jsem zacatecnik a mam zacatecnickou otazku: Proc navrhari Visual Studia nepouzili Singleton ve WinForm aplikaci, ktera je automaticky generovana jako vychozi template pro windows aplikaci? Diky za odpoved Honza

Avatar

Autor komentáře: Zdenek Drlik

Datum vložení: 20.1.2006 17:22:58

Mam obavy ze duvody pro tato designova rozhodnuti Vam dost tezko zodpovi nekdo jiny nez primo lide kteri je delali. Vse ostatni by byly pouhe dohady a nepodlozene nazory, takze pokud Vas tato otazka opravdu zajima tak se musite zeptat primo u zdroje. ;-)

Zpět na článek | Úvodní stránka Interval.cz