在没有获得锁的情况下测试锁?

Que*_*mer 9 c# multithreading locking exit

我有物品,他们得到锁.我想测试他们是否被锁定而没有获得锁定.我们的想法是,如果我TryEnter()的话,我要Exit()如果true只正常检查锁定.

看起来像一个非常基本的问题,它是如何完成的?

Rem*_*anu 22

当你看到锁解锁时,你可以获得哪些可能的信息?当您根据该信息做出决定时,可能已经采取了锁定.

  • @Tullo:但是可以通过像Monitor.TryEnter这样的零等待获取来更好地解决这个问题.零等待获得意味着你愿意获得锁定,如果是免费的,但不愿意等待.OP要求不同的语义,即.*偷看*没有获得.我真的看不出这种语义的真正用途. (6认同)
  • +1,确切地说.回答关于锁的过去状态的这个问题只能导致你做出错误的决定. (3认同)
  • 当您检查IsBeingUsed时,该线程可能已经停止了有用的工作,但在IsBeingUsed更新之前可能已经发生了上下文切换. (3认同)
  • 我可以看到这种行为的用途.想象一下这样一种情况,其中长时间获取锁,并且两个线程需要对同一组对象做不同的事情.如果两个集合操作不依赖于顺序,则首先查看对象可能很有用,如果正在使用,则跳过它以便稍后处理. (2认同)