2010-03-25 11 views
4

je considérer une fonction partagée: -VB .NET Fonction partagée si elle est appelée plusieurs fois simultanément

Public Shared Function CalculateAreaFromRadius(ByVal radius As Double) As Double 

    ' square the radius... 
    Dim radiusSquared As Double 
    radiusSquared = radius * radius 

    ' multiply it by pi... 
    Dim result As Double 
    result = radiusSquared * Math.PI 

    'Wait a bit, for the sake of testing and 
    'simulate another call will be made b4 earlier one ended or such 
    for i as Integer = 0 to integer.Max 
    Next 

    ' return the result... 
    Return result 

End Function 

Mes questions:

  1. Si j'ai deux ou plusieurs fils dans la même vb. net app et chacun d'eux appelle la fonction partagée en même temps avec différents RADIUS, auront-ils chacun leur propre zone?

  2. Je veux savoir pour chaque appel à la fonction si elle utilise les mêmes variables locales ou chaque appel crée de nouvelles instances de variables locales? Les réponses aux questions ci-dessus seront-elles les mêmes Si j'ai plusieurs applications monothread (2+) et qu'elles appellent toutes la fonction en même temps avec une valeur RADIUS différente?

J'apprécierai votre réponse. Je vous remercie.

Répondre

6

1) Si j'ai deux ou plusieurs threads dans le même vb application .net et chacun d'eux appelle la fonction partagée en même temps avec RADIUS différents, vont-ils reçoivent chacun leur propre RÉGION? Oui, car la valeur du rayon est transmise par valeur et la méthode n'utilise que des variables déclarées localement.

2) Je veux savoir pour chaque appel à la fonction si elle utilise les mêmes variables locales ou si chaque appel crée de nouvelles instances de variables locales? Chaque appel crée une nouvelle instance de ses variables locales

Chaque appel crée une nouvelle instance de ses variables locales. 3) Est-ce que les réponses aux questions ci-dessus seront les mêmes Si j'ai plusieurs (2+) applications à un seul thread et qu'elles appellent toutes la fonction en même temps avec une valeur RADIUS différente?

Oui. Encore une fois, parce qu'il n'y a pas de stockage partagé d'informations et parce que toutes les entrées sont passées par valeur, il est thread-safe.

+0

Merci pour votre description détaillée –

3

La fonction utilise pas d'état externe. Il accède uniquement à ses variables locales, il est donc parfaitement sûr de l'appeler à partir de différents threads.

  1. Oui
  2. Les variables locales sont spécifiques à l'appel spécifique quel que soit le fil de la fonction est en cours d'exécution sur (pensez à une fonction récursive, chaque fois que vous appelez la fonction, il aura un ensemble distinct de locaux variables).
  3. Oui
+0

Merci pour la confirmation –