这种相互排斥的模式是否像我认为的那样安全?如果是这样,你怎么称呼它?
lock (_lock) { if (_flag) return; else _flag = true; } try { //critical code... } finally { _flag = false; }
我想确保关键部分,但没有其他线程堆积等待获取锁定.显然,我确保标志设置在其他地方.有没有更好的办法?
不,那不安全.如果要确保互斥而不阻塞,可以使用Monitor.TryEnter:
if (Monitor.TryEnter(lockObj, 0)) { // got the lock ! try { // code } finally { // release the lock Monitor.Exit(lockObj); } }
你看过了Monitor.TryEnter
吗?