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 アプリに 2 つ以上のスレッドがあり、それぞれが異なる RADIUS で同時に共有関数を呼び出す場合、それぞれ独自の AREA を取得しますか?

  2. 関数の呼び出しごとに同じローカル変数を使用しているかどうか、または呼び出しごとにローカル変数の新しいインスタンスが作成されているかどうかを知りたいですか?

  3. 複数 (2 つ以上) のシングル スレッド アプリがあり、それらすべてが異なる RADIUS 値で同時に関数を呼び出す場合、上記の質問に対する回答は同じになりますか?

私はあなたの応答に感謝します。ありがとうございました。

4

2 に答える 2

6

1) 同じ vb .net アプリに 2 つ以上のスレッドがあり、それぞれが異なる RADIUS で同時に共有関数を呼び出す場合、それぞれ独自の AREA を取得しますか?

はい、半径の値は値で渡され、メソッドはローカルに宣言された変数しか使用しないためです。

2) 関数の呼び出しごとに同じローカル変数を使用しているかどうか、または呼び出しごとにローカル変数の新しいインスタンスが作成されているかどうかを知りたいですか?

各呼び出しは、そのローカル変数の新しいインスタンスを作成します。

3) 複数 (2 つ以上) のシングル スレッド アプリがあり、それらすべてが異なる RADIUS 値で同時に関数を呼び出す場合、上記の質問に対する回答は同じになりますか?

はい。繰り返しますが、情報の共有ストレージがなく、すべての入力が値で渡されるため、スレッドセーフです。

于 2010-03-25T21:08:58.850 に答える
3

関数は外部状態を使用しません。ローカル変数にのみアクセスしているため、別のスレッドから呼び出しても完全に安全です。

  1. はい
  2. ローカル変数は、関数が実行されているスレッドに関係なく、特定の呼び出しに固有です (再帰関数について考えてみてください。関数を呼び出すたびに、個別のローカル変数のセットがあります)。
  3. はい
于 2010-03-25T21:06:51.730 に答える