私はいくつかのスレッドとデリゲートで動作するメソッドを持っています。マルチスレッドとデリゲートの呼び出し
public delegate void Del(string threadId, string value, ref string result);
public event Del Analyze= null; // The external world can plug in a method
// this method runs simultanioulsy in several threads
private void threaded()
{
string s= null;
// yadayada s gets a value and I want a result back
// from the external world
string result = null;
is (Analyze != null)
Analyze("some thread id", s, ref result);
}
私はイベントとして使用する方法が
Analyze("some thread id", s, ref result);
が同時に呼び出された場合、安全、などが、何が起こるのスレッドにするために同期させる必要があることを承知していますか?それは大丈夫ですか?それとも、私は次のように分析して同期する必要があります:
lock(someobj)
{
Analyze("some thread id", s, ref result);
}
そこで問題は、より多くのようなものです。このスレッドのような「イベント」は、呼び出し元のクラスの観点から安全である(私は、スレッドの安全性を保証する必要があります知っていますプラグインされたメソッド)
はい、複数のスレッドで共有されているリソースを操作する場合は、常に同期する必要があります。 –
@ rory.ap確かに、これは 'Analyze(...)'が状態を変更するかどうかによって異なります。 –
@ScottPerham私はそれが欲しいと思います。そうでなければ、パラメータ 'ref'を作ることに意味がありません。 – itsme86