Immutabilité et variables statiques
-
03-07-2019 - |
Question
Je suis en train de concevoir des classes immuables mais je dois avoir des variables telles que, par exemple, .Count
pour obtenir le nombre total d'instances. Mais le fait d’avoir une variable statique affecterait-il le multi-threading?
Les méthodes telles que Ajouter, Supprimer, etc. doivent mettre à jour la valeur .Count
. Peut-être que je devrais en faire une propriété paresseuse?
La solution
Si vous ne faites que créer un compteur, les opérations verrouillées peuvent également constituer une option au lieu d’un verrou. MSDN contient un exemple dans le contexte d'un décompte de références .
Autres conseils
Vous pouvez envisager d'utiliser des fonctions de la classe Interlocked, au moins dans l'exemple que vous avez donné.
Mais le fait d’avoir une variable statique affecterait-il le multi-threading?
bien sûr! l'état partagé est affecté, par définition, par multi-threading.
Parce que les méthodes telles que Ajouter, Supprimer, etc. doivent mettre à jour la valeur .Count. Peut-être que je devrais en faire une propriété paresseuse?
il vaut mieux utiliser une classe qui effectue un ajout atomique (comme AtomicInteger en java) dans Afin d'éviter les verrouillages: jetez un coup d'œil ici
Oui, chaque fois que vous mettez à jour une variable partagée dans un environnement multithread, vous devez simplement envelopper ces mises à jour dans un verrou.