2010-03-25 32 views
4

考慮我有一個共同的功能: -VB .NET共享功能如果被多次同時

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同時調用共享功能,他們每個人都會得到自己的區域?

  2. 我想知道每個函數的調用,如果它使用相同的本地變量或每個調用創建局部變量的新實例?

  3. 上述問題的答案是否相同如果我有多個(2+)單線程應用程序,並且它們都使用不同的RADIUS值同時調用該函數?

我會感謝您的迴應。謝謝。

回答

6

1)如果我有兩個或多個線程在同一VB .NET應用程序,他們每個人的要求在同一時間用不同的RADIUS共享功能,他們每次都會得到自己的區?

是的,因爲半徑值是通過值傳遞的,並且該方法只使用本地聲明變量。

2)我想知道每個調用函數,如果它使用相同的局部變量或每個調用創建新的局部變量實例?

每次調用都會創建一個新的本地變量實例。

3)上述問題的答案是否相同如果我有多個(2+)單線程應用程序,並且它們都使用不同的RADIUS值同時調用該函數?

是。同樣,由於沒有信息的共享存儲,並且所有輸入都按值傳遞,所以它是線程安全的。

+0

感謝您的詳細描述 – 2010-03-31 19:55:24

3

該功能使用無外部狀態。它只訪問它的局部變量,所以從不同的線程調用它是完全安全的。

  1. 局部變量是特定的,無論功能正在運行的線程的特定呼叫(想想遞歸函數;每次調用函數時,它就會有一組不同的地方變量)。
+0

感謝您的確認 – 2010-03-31 19:55:00