2010-03-25 3 views
4

Рассмотрим У меня есть общая функция: -VB .NET Shared Function, если вызывается несколько раз одновременно

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 

Мои вопросы:

  1. Если у меня есть два или более потоков в то же VB. сетевое приложение, и каждый из них одновременно вызывает совместно используемую функцию с разными RADIUS, каждый из них получит свой собственный AREA?

  2. Я хочу знать, для каждого вызова функции, если он использует одни и те же локальные переменные или каждый вызов создает новые экземпляры локальных переменных?

  3. Будут ли ответы на вышеуказанные вопросы одинаковыми. Если у меня есть несколько (2+) однопоточных приложений, и все они одновременно вызывают функцию с другим значением RADIUS?

Буду признателен за ваш ответ. Спасибо.

ответ

6

1) Если у меня есть два или более потоков в том же VB .NET приложения и каждый из них вызывает общую функцию одновременно с разными радиусами, они будут каждый получает свою собственную ПЛОЩАДЬ?

Да, поскольку значение радиуса передается по значению, и метод не использует ничего, кроме локального объявления переменных.

2) Я хочу знать, для каждого вызова функции, если он использует одни и те же локальные переменные или каждый вызов создает новые экземпляры локальных переменных?

Каждый вызов создает новый экземпляр его локальных переменных.

3) Будут ли ответы на вышеуказанные вопросы одинаковыми. Если у меня есть несколько (2+) однопоточных приложений, и все они одновременно вызывают функцию с другим значением RADIUS?

Да. Опять же, поскольку нет общего хранилища информации, и поскольку все входы передаются по значению, он является потокобезопасным.

+0

Спасибо за подробное описание –

3

Функция не имеет внешнего состояния. Он только получает доступ к своим локальным переменным, поэтому вполне можно назвать это из разных потоков.

  1. Да
  2. Локальные переменные являются специфическими для конкретного вызова, независимо от нити функция работает на (думаю о рекурсивной функции, каждый раз при вызове функции, она будет иметь определенный набор локальных переменные).
  3. Да
+0

Спасибо за подтверждение –

 Смежные вопросы

  • Нет связанных вопросов^_^