我有一个可以更改内部状态的类。
这些状态变化从来都不是简单的,并且通常由跨多个线程发生的几个异步操作组成,例如打开连接和发送一些数据
通过使用锁和布尔值来指示状态当前是否正在更改,我可以确保在任何给定时间只有一个操作可以访问状态
lock (thisLock) {
while (stateChanging)
Monitor.Wait(thisLock);
stateChanging= true;
//now free to go away and do other things while maintaining exclusive access to the inner state
}
这工作正常,但这意味着在等待获得独占访问状态的线程中发生了不必要的阻塞
所以我设想的是一个基于回调的锁,其中状态改变操作会做这样的事情 -
sharedLock.ObtainLock(delegate() {
//we now have exclusive access to the state
//do some work
socket = new Socket();
socket.BeginConnect(hostname, connectcallback);
});
void connectcallback(IAsyncResult result) {
socket.EndConnect(result);
isConnected = true;
sharedLock.ReleaseLock();
}
这样的概念普遍吗?它有名字吗?我是在错误地处理事情吗?