0

これは基本的な質問のようですが、Googleは私を助けてくれませんでした... C#.NET WPFで基本的なスレッドロックを行うにはどうすればよいですか?私の非常に単純なユーザーアプリケーションでは、結果を1つの共通データ構造に保存したり、この共通データ構造から読み取ったりする、時間のかかる操作を実行する複数のスレッドがあります。スレッドセーフを維持するために、このデータ構造へのアクセスをロック()およびロック解除()できるようにしたいと思います。ただし、コードには、1つだけでなく、このデータ構造にアクセスするさまざまな場所があります。このロックを実装するために使用される.NETオブジェクトは何ですか?

4

4 に答える 4

2

同期を実現するには複数の方法があります。私が作成したスクリーンショットをご覧ください ここに画像の説明を入力してください

于 2012-09-21T02:33:18.247 に答える
2

これを試して:

public static class LockHolder
{
    public static object Lock = new object();
}

次に、コードで次を使用します。

lock(LockHolder.Lock)
{
    //your safe code
}

http://msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.71).aspx

もう少し情報が役立つかもしれないと思います。IIRCは、基本的にコンパイラによって展開され、安全なコードlock(object o)へのアクセスを制限するマクロです。これは、期待どおりのことです。必ずしも明らかではないのは、どのオブジェクトもロックになる可能性があり、それぞれが安全なロックごとに必要であるということです。私が持っている場合oo

object a = new object();
object b = new object();

そして、周りにあるものへのアクセスを妨げないlock(a)thenを実行します。ほとんどのコードサンプルは、特定のクラスの現在のインスタンスにロックするを示しています。これは、グローバルロックが必要で、そのクラスの複数のインスタンスが実行されている場合は必要ありません。lock(b)lock(this)

于 2012-09-21T00:41:31.507 に答える
0

System.Collections.Concurrent名前空間にあるようなスレッドセーフなデータ構造を使用する方が簡単な場合があります。彼らはあなたのためにすべての仕事をします。

于 2012-09-21T00:54:50.217 に答える
0

SachaBarberによるCodeProjectに関するこの素晴らしい記事を確認してください。

http://www.codeproject.com/Articles/27366/Beginner-s-Guide-to-Threading-in-NET-Part-3-of-n

いくつかの同期メカニズムについて説明します。

乾杯

于 2012-09-21T03:27:47.703 に答える