C#のミューテックスとセマフォとは? どこに実装する必要がありますか?
マルチスレッドでそれらをどのように扱うことができますか?
C#のミューテックスとセマフォとは? どこに実装する必要がありますか?
マルチスレッドでそれらをどのように扱うことができますか?
MSDNから始める必要があります。
通常、Mutexはプロセス間でのみ使用します。たとえば、複数のアプリケーションが共有する必要のあるリソースがある場合、または単一インスタンスのアプリを構築する場合(つまり、一度に1つのコピーのみを実行できるようにする場合)。
セマフォを使用すると、特定の数の同時スレッドへのアクセスを制限できるため、たとえば、一度に最大2つのスレッドで特定のコードパスを実行できます。
http://www.albahari.com/threading/part2.aspx#_Synchronization_Essentialsを読むことから始め、 bobbymcr が投稿した MSDN リンクで強化します。
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);
}