4

考虑我有一个共享功能:-

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 调用共享函数,他们每个人都会得到自己的 AREA 吗?

  2. 我想知道函数的每次调用是否使用相同的局部变量,或者每次调用都会创建局部变量的新实例?

  3. 如果我有多个 (2+) 单线程应用程序并且它们都以不同的 RADIUS 值同时调用该函数,上述问题的答案是否相同?

我会很感激你的回复。谢谢你。

4

2 回答 2

6

1)如果我在同一个 vb .net 应用程序中有两个或多个线程,并且每个线程同时使用不同的 RADIUS 调用共享函数,他们每个人都会得到自己的 AREA 吗?

是的,因为半径值是按值传递的,并且该方法只使用本地声明的变量。

2)我想知道每次调用函数是使用相同的局部变量还是每次调用都会创建局部变量的新实例?

每次调用都会创建其局部变量的一个新实例。

3) 如果我有多个 (2+) 单线程应用程序并且它们都以不同的 RADIUS 值同时调用该函数,上述问题的答案是否相同?

是的。同样,因为没有共享的信息存储,并且因为所有输入都是按值传递的,所以它是线程安全的。

于 2010-03-25T21:08:58.850 回答
3

该函数不使用外部状态。它只访问它的局部变量,因此从不同的线程调用它是完全安全的。

  1. 是的
  2. 无论函数在哪个线程上运行,局部变量都是特定于特定调用的(想想递归函数;每次调用函数时,它都会有一组不同的局部变量)。
  3. 是的
于 2010-03-25T21:06:51.730 回答