C# : Que faire si une méthode statique est appelée à partir de plusieurs threads?
Dans mon Application j'ai une méthode statique qui est appelée à partir de plusieurs threads en même temps. Est-il un danger de mes données soient mélangés?
Dans ma première tentative, la méthode n'était pas statique et j'ai été la création de plusieurs instances de la classe. Dans ce cas, mes données mêlé d'une certaine manière. Je ne suis pas sûr de savoir comment cela se passe, car il ne se passe parfois. Je suis toujours le débogage.
Mais maintenant, la méthode est statique sur je n'ai pas de problèmes jusqu'à présent. Peut-être que c'est juste de la chance. Je ne sais pas pour sûr.
Vous devez vous connecter pour publier un commentaire.
Les Variables déclarées à l'intérieur des méthodes (avec l'exception possible de "capturé" variables) sont isolés, de sorte que vous n'aurez pas de problèmes inhérents; toutefois, si votre méthode statique accède à un état partagé, tous les paris sont éteints.
Exemples de partage d'etat serait:
Si vous avez partagé de l'état, vous devez soit:
whatever.SomeData
à plusieurs reprises, vous avez bien luwhatever.SomeData
une fois dans une variable locale, puis il suffit d'utiliser la variable de noter que cette aide uniquement pour l'état immuable!)Oui, c'est juste de la chance. 😉
Il n'a pas d'importance si la méthode est statique ou non, ce qui importe est de savoir si les données sont statiques ou pas.
Si chaque thread a son propre instance de la classe avec son propre jeu de données, il n'y a pas de risque que des données ne soient mélangés. Si les données sont statiques, il n'y a qu'un seul jeu de données, et tous les threads partagent les mêmes données, il n'existe aucun moyen de ne pas les mélanger.
Lors de vos données dans des instances distinctes toujours se mélange, c'est probablement parce que les données ne sont pas vraiment distinctes.
It doesn't matter if the method is static or not, what matters is if the data is static or not
. Juste pour ajouter, les variables locales déclarées dans le champ d'application d'une méthode statique ne font pas partie des données dont nous avons besoin pour être gêné à ce sujet dans le scénario donné.Méthodes statiques devrait être bon pour plusieurs threads.
Données statiques sur l'autre main peut causer un problème parce que les tentatives d'accéder aux mêmes données à partir de différents threads doit être contrôlée pour s'assurer qu'un seul thread à la fois une lecture ou d'écriture des données.
MSDN dit Toujours :
Edit:
Comme les gars disent, n'est pas toujours le cas, et clairement, ce s'applique aux classes conçu de cette façon dans la BCL, de ne pas l'utilisateur créé des classes où cela ne s'applique pas.