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