假设如下:
1.有一个用户会话持有表中几行的排他锁。
- 另外两个(或更多)会话被启动,每个会话都请求获取当前持有的一些锁
- 为了简化这种情况,我们假设新会话只想获取一个行锁,而且它们都需要同一个行锁。实际上,不太可能完全按照这种方式发生,因为每个会话都将尝试锁定一个由相连行组成的“孤岛”,但我怀疑这会影响这个问题的答案。
- Documentation on concurrency说道:
如果锁处于活动状态,则会话会要求在锁被释放时得到通知。`
- 持有锁的原始会话提交并释放其锁。
两个等待会话中的哪一个将得到通知,它现在能够获取锁?是否有DB设置来控制此操作?
如果以随机顺序通知等待者,这是否意味着当许多等待者竞争同一个锁时,有可能使其中一个会话缺锁,或者是否有一种机制来解决这种情况?
1条答案
按热度按时间wgxvkvu91#
当你在寻找一个资源(并且其他人拥有它)时,你会进入一个“等待者”队列,顾名思义,你会“排队”。
如果你真的想深入挖掘,让一个会话锁定一行,然后让其他几个会话等待该行,然后这样做:
以获取显示浮动的各种队列的跟踪文件。
一个很好的资源是:Oracle Core,Jonathan刘易斯著。