2

いくつかの非同期タスクを生成する再帰関数があります。各タスクは、共通の辞書オブジェクトを更新します。

関数内のパラメーターとしてロック オブジェクトを他のスレッドと共有してもよろしいですか?

public class RecursiveTest
{ 

   void DoRecursiveWork(ref object myDictLock, dictionary<string,string> myDict)
   {
    // yadda.. async code that calls DoRecursiveWork()

   }

}
4

1 に答える 1

5

あなたがこのようなことを計画していると仮定すると

// do something
lock (myDictLock) {
    // access the dictionary
}
// do something else

オブジェクトを「参照」または「値」(つまり、参照への参照または参照の値で、object参照型であるため) で渡すことができます。どちらの場合でも、オブジェクトのロックは機能します。参照渡しの場合、再帰チェーンの先頭で渡された変数を代入することもできますが、それが意図されているとは思えません。

于 2012-08-30T03:32:33.563 に答える