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. p>
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? P>
4 Réponses :
Aucune méthode de tout type en C # partage les variables locales. P>
Vous pouvez penser à des fonctions statiques dans VB. P>
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. P>
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. P>
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é ... p>
sont les variables locales "partagées" sur des usages de la méthode? P> blockQuote>
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. (*) p>
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. p> blockQuote>
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 em> 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. P>
dans une application filetée, lorsque vous devez-en un pas em> utiliser une méthode statique? P> blockQuote>
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. P>
(*) 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é. SUB> SUP> p>