Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Richard Clark

J'aime pas les blogs mais comme j'aime le mouton...

Actualités

  • c2i.fr
Article : "Design pattern Singleton avec .Net (VB.Net et C#)" sur Developpez.com (solution?)

Marrant : hier, je venais de me pencher sur un certain problème et voilà qu'il réapparait ce matin via cet article sur Developpez.com.

A priori, il n'y a rien à redire sur cet article (qui reprends d'ailleurs volontairement ou involontairement celui de Mathieu sur Tech Head Brothers).

Pourtant, dans ces deux articles, il peut y avoir un problème (oh je sais, je suis vicieux) : saurez-vous trouver lequel ?

NB: pb insoluble en .NET 1.0 et 1.1

Alors ou est le problème ?

Tout vient des problèmes d'allocation mémoire de la CLR. En C#, on peut utiliser le mot clé volatile (qui n'existe pas en VB .NET).

D'ou une solution C# ici.

Ou alors l'API (nouvelle en 2), Thread.MemoryBarrier pour VB comme l'explique Paul Vick.

A noter la problématique différente avec les CPU x86 et AMD.

OK, c'est vicieux, mais c'est marrant parce que c'était un sujet de conversion d'hier avec l'équipe de dev de vb ;-)

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mardi 17 juillet 2007 08:08 par richardc

Commentaires

pc152 a dit :

Je n'ai pas vu le problème potentiel ;)

domage

# juillet 17, 2007 08:46

Miiitch a dit :

Personnellement j'aurais mis l'allocation de l'objet dans le constructeur statique ca évite un test à chaque appel.

# juillet 17, 2007 09:49

TheSaib a dit :

Problème d'ordonnancement des appels à cause d'un flag à la con beforefieldinit.

http://www.yoda.arachsys.com/csharp/beforefieldinit.html

# juillet 17, 2007 10:42

richardc a dit :

Ce n'est pas ce à quoi je pensais. Pour ton beforefieldInit, cela pourrait être embêtant si l'on veut maitriser l'instant de l'initialisation, mais la plupart du temps, on s'en contre tape le coquillard.

Ce à quoi je pense peut être vraiment problématique ;-)))

# juillet 17, 2007 11:02

Troborg a dit :

Pareil que Miiitch :

j'aurai mis l'allocation de l'objet dans le constructeur statique.

Pas seulement car ça évite un test à chaque fois,

mais surtout car ça évite un 1er accès concurrent qui pourrait avoir des conséquences gênantes (création de 2 objets singletons !)

Le constructeur static est appelé une fois et une seule.. Ce qui gère les accès concurrentiels.

A défaut d'utiliser le constructeur static, il faudrait ajouter un lock pour protéger l'initialisation.

# juillet 17, 2007 11:20

richardc a dit :

Petit indice: ca marche surtout pas sur les CPU d'AMD ;-)

# juillet 17, 2007 14:46

FREMYCOMPANY a dit :

Ben on peut allez vider manuellement le champs Instance via la réflection (qui n'empeche pas de modifier les champs privates si on utlise certains paramètres)

Voir : http://msdn2.microsoft.com/fr-fr/library/4ek9c21e(VS.80).aspx

# juillet 17, 2007 17:05

FREMYCOMPANY a dit :

@troborg : Ils ont mis un Synclock (2e version)

# juillet 17, 2007 17:07

RaptorXP a dit :

Moi ça m'a l'air thread safe tout ça (la 2e version avec le lock)...

# juillet 17, 2007 18:02

Troborg a dit :

Ah oui... J'avais pas vu..

(Pourtant c'est mis dans les 2 articles ! ça m'apprendra à survoler vaguement sans tout lire)

En plus la solution utilisant le constructeur static est même évoquée dans l'article de tech-head.

Bref, j'ai tout faux :)

Tant pis.

# juillet 17, 2007 18:03
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Monitoring et Patron de méthode par Le blog de Marc Ranchin le il y a 2 heures et 59 minutes

- ADO.NET Data Services Hooking POC v2 par Matthieu MEZIL le il y a 3 heures et 13 minutes

- Back from NYC ! par .net is good... C# is better ;) le il y a 3 heures et 51 minutes

- Hello World! par Le blog de hamid le il y a 11 heures et 59 minutes

- MSBuild Extension Pack sur codeplex par Michel Perfetti [Miiitch] le il y a 13 heures et 18 minutes

- TCB : Travailler en équipe sans réseau par The Mit's Blog le il y a 16 heures et 28 minutes

- Accès anonyme et les pages Forms / viewlsts.aspx... par Nicolas Humann le il y a 20 heures et 22 minutes

- l'Atelier 4 du coach C# est disponible par Bernard Fedotoff le il y a 21 heures et 57 minutes

- [WPF] Formatter l’affichage lors d’un binding, via StringFormat par Thomas Lebrun le 10-07-2008, 10:22

- WSC08 : Le bilan, Les Photos, Les Webcasts à voir ou à revoir par Blog de Daniel TIZON [daniel] le 10-07-2008, 01:14