リソースへの排他的アクセスを提供すると同時に、他のクラスが読み取るロックの状態 (_isWorking) に関する情報を提供する方法を見つけようとしています。
これが私がこれまでに思いついたものです:
private int _isWorking = 0;
public bool IsWorking
{
get { return Interlocked.CompareExchange(ref _isWorking, 0, 0) == 1; }
}
public void LaunchProcess()
{
if (Interlocked.CompareExchange(ref _isWorking, 1, 0) == 0)
{
try
{
DoExpansiveProcess();
}
finally
{
Interlocked.Exchange(ref _isWorking, 0);
}
}
}
public void DoExpansiveProcess()
{
Thread.Sleep(30000);
}
2 番目のスレッドは、スレッドが既にプロセスを実行していることを確認すると、メソッドを離れて何もしないため、正確にはロックとして機能しません。
これを行うのは正しい方法ですか、それとも目的により適した C# 3.5 構造はありますか?
そして、状態に関する情報を提供しながら、最初のスレッドが終了した後も2番目のスレッドがメソッドを実行する「実際の」ロックシナリオを実装する方法は?