IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

My.Settings vraiment threadSafe ?


Sujet :

VB.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 159
    Points
    159
    Par défaut My.Settings vraiment threadSafe ?
    Bonjour,

    Dans la procédure éxecutée par les threads j'ai placé ça :

    My.Settings.TestInteger += 1

    TestInteger est un Integer qui vaut 0 au départ.

    Je lance 10 Threads et à la fin, TestInteger vaut toujours moins que le nombre de thread.

    j'en conclue que, grosso modo, deux Threads ont lu la valeur (copié ?) par exemple "1" un des deux fini et passe le TestInteger à 2 et l'autre fait de même, sans se rendre compte qu'entre temps la valeur a bougée.
    Il (re)mets donc aussi TestInteger à 2.

    Je ne cherche pas de solution au problème, je la connais (bloc Sync Lock etc) mais MSDN Indique que my.Settings est Thread Safe en plus la prop Synchronized de My.Settings et bien à True. Et j'ai le meme pb avec un instance de My.Settings obtenue avec la méthode "Synchronized".

    Que veut donc dire thread safe ici si alors qu'un thread manipule l'objet un autre peut aussi le faire. Juste que cela ne léve pas d'exception Ex DeadLock.

    Si qq a une tite explication...

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Je sais pas trop pour l'histoire du Thread safe de cette classe. Cependant, quand on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    My.Settings.TestInteger += 1
    il se pourrai que le compilateur l'interprète comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    My.Settings.TestInteger = My.Settings.TestInteger  + 1
    Et dans ce cas alors le problème deviens possible même si Settings est Thread Safe. Il faudrait locker l'objet Settings ou alors faire un truc qui implémente une fonction "Inc"...

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ou synclock
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 159
    Points
    159
    Par défaut
    Oui c'est sur qu'il va bosser avec des copies.
    La mention Thread Safe garantirait ainsi une manipulation sans exception mais par contre le résultat n'est pas garanti. lol

    Oui je connais le Sync Lock, mais ce n'est pas la solution que je chercher c'est l'explication. C'est clair qu'avec un SyncLock ya plus de pb.

    Au moins cela semble sous entendre que pour des accés en lecture seule cela ne pose pas de pb.

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    t'as essayé dans les 2 modes debug et release pour voir si ca fait pareil ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 159
    Points
    159
    Par défaut
    Non mais bon je pense que si ça doit encore être pire...

Discussions similaires

  1. Pas de JOIN sous Oracle (vraiment dommage...)
    Par Isildur dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/03/2007, 11h28
  2. set term ^
    Par tux dans le forum Débuter
    Réponses: 8
    Dernier message: 12/10/2004, 20h42
  3. IB 6.0.1 - Win XP - Character Set
    Par SuperTotor dans le forum InterBase
    Réponses: 4
    Dernier message: 03/06/2003, 20h25
  4. Query data set
    Par Sandra dans le forum JBuilder
    Réponses: 3
    Dernier message: 20/01/2003, 10h08
  5. character set // Nls_lang
    Par fopicht dans le forum Oracle
    Réponses: 2
    Dernier message: 23/05/2002, 12h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo