3

C# でのスレッド化について質問があります。以下に投稿されたコードを参照してください。

 public class TestThreading
{
    private System.Object lockThis = new System.Object();

    public void Function1()
    {

        lock (lockThis)
        {
            // Access thread-sensitive resources.
        }
    }

    public void Function2(){
        lock (lockThis)
        {
            // Access thread-sensitive resources.
        }

    }

}

ここで私の質問は、あるスレッドが Function1 (ロック ブロック内) に入り、同時に別のスレッドが Function2 に入った場合に何が起こるかということです。

  1. スレッドは独立して実行されます。
  2. Function 2 Goes に入ったスレッドは、Funtion1 スレッドによってロックが解除されるまで待機します。
  3. 関数 2 に入ったスレッドは例外をスローします。

私はC#が初めてなので、簡単な基​​本的な質問をします。前もって感謝します。

4

3 に答える 3

3

Function 2 Goes に入ったスレッドは、Funtion1 スレッドによってロックが解除されるまで待機します。

ロックの目的は、一度に 1 つのスレッドだけがアクセスできるコードの「安全な」領域を提供することです。もう一方のスレッドはスリープ状態になり、最初のスレッドがロックを解除すると再開されます。

于 2013-05-29T10:16:09.303 に答える
1

2番が起こります。2 番目のスレッドは、ロックが解放されるのを待ってから実行します。

于 2013-05-29T10:16:20.553 に答える
1

2 番目のスレッドは、最初のスレッドがロックを解放するのを待ってから、ロックを取得してコードを実行します。

マルチスレッドの問題とライブラリについて説明している次の記事を読むことをお勧めします

マネージド スレッディングのベスト プラクティス

C# でのスレッド化 Joseph Albahari

于 2013-05-29T10:16:21.880 に答える