21

C#のミューテックスとセマフォとは? どこに実装する必要がありますか?

マルチスレッドでそれらをどのように扱うことができますか?

4

3 に答える 3

33

MSDNから始める必要があります。

  • System.Threading.Mutex:プロセス間同期にも使用できる同期プリミティブ。
  • System.Threading.Semaphore:リソースまたはリソースのプールに同時にアクセスできるスレッドの数を制限します。

通常、Mutexはプロセス間でのみ使用します。たとえば、複数のアプリケーションが共有する必要のあるリソースがある場合、または単一インスタンスのアプリを構築する場合(つまり、一度に1つのコピーのみを実行できるようにする場合)。

セマフォを使用すると、特定の数の同時スレッドへのアクセスを制限できるため、たとえば、一度に最大2つのスレッドで特定のコードパスを実行できます。

于 2009-10-12T06:37:20.087 に答える
7

http://www.albahari.com/threading/part2.aspx#_Synchronization_Essentialsを読むことから始め、 bobbymcr が投稿した MSDN リンクで強化します。

于 2009-10-12T18:27:49.137 に答える
6

lock ステートメントをチェックアウトすることをお勧めします。C# のスレッド同期タスクの大部分を処理できます。

class Test {
    private static object Lock = new object();

    public function Synchronized()
    {
        lock(Lock)
        {
            // Only one thread at a time is able to enter this section
        }
    }
}

ロック ステートメントは、Monitor.Enter および Monitor.Exit を呼び出すことによって実装されます。これは、次のコードと同等です。

Monitor.Enter(Lock);    
try
{
    // Only one thread at a time is able to enter this section
}
finally
{
    Monitor.Exit(Lock);
}
于 2009-10-12T07:10:29.257 に答える