Общая функция VB .NET, если вызывается несколько раз одновременно - PullRequest
4 голосов
/ 26 марта 2010

Считайте, что у меня есть общая функция: -

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 .net, и каждый из них вызывает функцию общего доступа одновременно с разными RADIUS, каждый из них получит свою собственную область?

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

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

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

Ответы [ 2 ]

6 голосов
/ 26 марта 2010

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

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

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

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

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

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

3 голосов
/ 26 марта 2010

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

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