|
1、嗯,应该是一旦#sess2提交,#sess3先得到锁了;
2、整个过程中,看似#sess1和#sess3都被阻塞,其实,他们阻塞的原因不同,#sess1是在等#sess2在c表上持有的模式3的锁表释放,但#sess3不是,不然,#sess3也是往c表上加模式3的表锁,这和#sess2持有的模式3的表锁一样,没必要等#sess2释放这个表锁,#sess3可以直接将这个表锁加到c表上;
3、既然两者等待的事件不同,他们就不在一个队列上,不在一个队列上还有必要非要分先后顺序吗?我们在食堂排队买饭,我们分别排在两个队里,开始我排的那队短,比你靠前,但后来你那队窗口卖饭快,你先到达卖饭的窗口,这时你有必要等我买完饭,你才再买吗?
4、既然不排在一个队上,那么我们就没必要互相等,只需要各自等排在我们前面那个人就行了,因为,他们才是阻塞我们的事件,不管之前我们两个谁先谁后。这里也一样,#sess2提交,#sess3和#sess1阻塞事件都解除了(严格来讲,不是同时解除),剩下的那就看谁快了,这里,#sess3肯定快,因为,#sess1要想在c表上加模式4的表锁,必须等#sess2提交完成,而#sess3不用。
个人的理解,仅供参考,共勉。
|
|