public class Unique 
...{
int _useCount = 0;
Event_Trigger _trigger = new Event_Trigger();
public override void Lock()
...{
if( InterLocked.Increase(ref this._useCount) != 1 )
...{
this._trigger.Wait();
}
}
public override bool Try_Lock()
...{
return InterLocked.CompareExchange(ref this._useCount, 1, 0) == 0;
}
public override void UnLock()
...{
if(InterLocked.Decrement(ref this._useCount) > 0)
this._trigger.Post();
}
public override void Release()
...{
this._trigger.Close();
}
};其中的Event_Trigger在我的上篇文章有介紹,Event_Trigger就是Semaphore,Wait()相當於WaitOne(),Post()相當於Release().在這個鎖中引用計數useCount是個臨界條件我們可以把它看成是一個並發事件,如果lock的時候大於1就阻塞,unlock的時候大於0就喚醒.這個事件必然會發生所以就讓它發生吧,不需要用絕對時間點的方式進行多次判斷.