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

共享锁(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 是否锁才能再上自己需要的锁才对嘛!

你的理解并不全面。加锁当然是有必要的
我给你举个例子吧 A会话和B会话C都要访问表1
下面的流程是按你的思路来理解的
A访问表1 加锁查表1
B访问表1 发现锁住了,不加锁因为没必要,直接查
C删除表1 这时A查询已经结束释放了锁但B还没查询结束。C发现锁没了于是删除表1。这时请问B怎么办?
如果这时候B也有共享锁这个问题就能避免了, C会被阻塞直到B完成。所以任何事务开始时必然要加共享锁。

  1. 100 百个事务都 可以对一个对象加上S锁,以防止自己在读的期间被其它事务修改。
  2. 事务拥有了S锁,不代表同时其它进程没有加S锁,得到X锁后才能做相应操作。
  3. 百度的说明,无法推导出这段解释。

关于S,X,锁,建议看 《数据库系统概论(第四版)》 王珊 萨师煊 高等教育出版社