我试图找到一种方法来提供对资源的独占访问,同时提供有关锁状态 (_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);
}
它不能完全像锁一样工作,因为第二个线程在看到一个线程已经在运行该进程时,只会离开该方法并且什么都不做。
这是执行此操作的正确方法,还是有更适合此目的的 C# 3.5 结构?
以及如何实现“真正的”锁定场景,第二个线程在第一个线程完成后仍会执行该方法,同时提供有关状态的信息?