百度百科对共享锁的的理解不对吧?

共享锁(S锁)又称为读锁,若事务T对数据对象A加上S锁,则事务T只能读A;其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

上述是百度百科对共享锁的理解。我认为是错误的。

1.所谓锁,肯定是一个线程或者一个事务先对某种资源上锁了,那么其它线程或者事务访问相同资源时就需要等待或者某些方面被限制了。所以事务T对数据对象A加上了S锁,其它事务就不能重复再加S锁了,重复加意义何在呢?

2.共享锁,就是事务T先访问数据对象A,它先上锁了,这个锁在数据读取方面是共享的,所以其它事务可以读取但是不能修改,但是事务T自己是可以修改数据的

3.事务T释放锁了,其它事务才能在数据对象A上锁,而不是说事务T上锁了,其它事务访问的时候也来上锁,根本就没有这个必要,而且毫无意义,其它事务正常读取数据,他们上什么锁呢?只能说事务T先锁上了,其它事务后来者,只好等事务T 是否锁才能再上自己需要的锁才对嘛!!!

回答

  1. 事务加S锁,就是告诉其他人,我正在读数据,你们不能改。如果不能重复加,也就是有些事务应该加S锁,但像你说的发现有S锁就不加了,那这个事务读的时候,数据被改了咋办,算谁的。
  2. 事务T上了S锁,事务T就只能读数据,不能修改数据。
    3.同1。
    mysql这样设计它的锁是有他的目地的。别跟其他锁混了,认为上了锁就只能串行化了。
以上是百度百科对共享锁的的理解不对吧?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>