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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top