11
votes

Une méthode statique partage-t-elle ses variables locales et ce qui se passe lors de l'utilisation simultanée de différents threads?

C # Question - J'essaie de déterminer s'il est correct d'utiliser une méthode statique dans laquelle, dans la méthode, il dispose de variables locales qu'il utilise. Les variables locales sont-elles "partagées" dans les usages de la méthode? Que se passe-t-il par exemple si la méthode statique est appelée / utilisée en même temps de différents threads? Est-ce que un bloc de fil jusqu'à ce que l'autre soit terminé, etc.

Peut-être que la question généralisée est, dans une application filetée, lorsque vous ne devez-il pas utiliser une méthode statique?


0 commentaires

4 Réponses :


2
votes

Aucune méthode de tout type en C # partage les variables locales.

Vous pouvez penser à des fonctions statiques dans VB.


0 commentaires

1
votes

Il y a beaucoup de raisons d'utiliser des méthodes statiques dans des applications multi-threadées. Rien de mal avec ça non plus. Tant que vous ne changez aucune variables globales (sans verrouillage), vous ne devriez pas avoir de problèmes là-bas.


0 commentaires

21
votes

Les variables locales dans la méthode vivent sur la pile et chaque fil a sa propre pile. Par conséquent, il est sûr pour plusieurs threads d'utiliser la méthode.

Toutefois, si la méthode utilise elle-même des variables statiques, vous devez utiliser la protection MT appropriée. Aussi des méthodes externes que vous pouvez appeler besoin d'être en sécurité ...


0 commentaires

4
votes

sont les variables locales "partagées" sur des usages de la méthode?

Non, ils ne sont pas. Chaque fil d'exécution de la méthode a sa propre copie des variables locales et elles sont indépendantes les unes des autres. Lorsque la méthode revient, la copie particulière des locaux pour ce thread particulier est supprimée. (*)

Que se passe-t-il par exemple si la méthode statique est appelée / utilisée en même temps de différents threads? Est-ce que un bloc de fil jusqu'à ce que l'autre soit terminé, etc.

Non, ils ne le font pas; Ils vont simplement exécuter la méthode sur deux piles séparées en même temps. Si vous veux les bloquer, utilisez le verrouillage Déclaration , qui provoque le deuxième fil qui pénètre dans l'instruction de verrouillage à attendre jusqu'à ce que le premier retourne de l'instruction LOCK. Cela peut être nécessaire si votre méthode accède aux champs (non locaux), qui sont des données partagées.

dans une application filetée, lorsque vous devez-en un pas utiliser une méthode statique?

Si vous devez utiliser une méthode statique ou non dépend de la question de savoir si la méthode nécessite un objet de fonctionner, mais n'a rien à voir avec si votre application est multi-filetée ou non. Aux fins de la filetage, une méthode statique n'est rien de spécial que d'une méthode non statique.

(*) Cela ne peut plus être vrai si vous avez une expression lambda ou une méthode anonyme à l'intérieur de la méthode qui utilise les variables locales, mais c'est une technicité.


0 commentaires