共享锁和排它锁

共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。

获准共享锁的事务职能读取数据,不能修改数据。

排他锁(X锁):如果事务T对数据A加上排他锁后,则其他事务不能在对A加任何类型的封锁。

获准排他锁的事务既能读取数据,也能修改数据。

数据库死锁的原因:若干事务相互等待对方释放封锁,就陷入了无限期等待状态,系统进入死锁。

预防数据库死锁的方法:1、要求一个事务必须一次性封锁所需要的所有数据(要么全成功,要么全部成功)

2、规定封锁数据的顺序,所有事务必须按照这个顺序实行封锁

解除数据库死锁的方法:允许死锁发生,然后解除它,如果发现死锁,则将其中一个代价较小的事务撤销,回滚这个事务,并释放此事务持有的封锁,使其他事务继续进行。

时间: 2024-10-31 15:04:14

共享锁和排它锁的相关文章

共享锁和排它锁(ReentrantReadWriteLock)

1.什么是共享锁和排它锁 共享锁就是允许多个线程同时获取一个锁,一个锁可以同时被多个线程拥有. 排它锁,也称作独占锁,一个锁在某一时刻只能被一个线程占有,其它线程必须等待锁被释放之后才可能获取到锁. 2.排它锁和共享锁实例 ReentrantLock就是一种排它锁.CountDownLatch是一种共享锁.这两类都是单纯的一类,即,要么是排它锁,要么是共享锁. ReentrantReadWriteLock是同时包含排它锁和共享锁特性的一种锁,这里主要以ReentrantReadWriteLock

java 实现共享锁和排它锁

一直对多线程有恐惧,在实现共享锁和排它锁之后,感觉好了很多. 共享锁    就是查询的时候,如果没有修改,可以支持多线程查询: 排它锁    就是修改的时候,锁定共享锁,停止查询,同时,锁定排它锁,只允许一个线程进行修改,修改完成后,再解开共享锁: 心路历程: 一开始的想法是,绝对不调用 sleep ,要用到sleep 的地方我觉得都可以用  notify() 和 wait() 替换,sleep(T) 我觉得T  的大小压根是无法算出来的,如果非要用sleep 我觉得T 的时间应该是一个动态的值

共享锁与排它锁区别(转)

共享锁[S锁]又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁.这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改. 排他锁[X锁]又称写锁.若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁.这保证了其他事务在T释放A上的锁之前不能再读取和修改A. 共享锁与排它锁区别 1.共享锁只用于表级,排他锁用于行级. 2.加了共享锁的对象,可以继续加共

对mysql乐观锁、悲观锁、共享锁、排它锁、行锁、表锁概念的理解

操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突) ----乐观锁 乐观锁不是数据库自带的,需要我们自己去实现.乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁),而在进行更新后,再去判断是否有冲突了. 通常实现是这样的:在表中的数据进行操作时(更新),先给数据表加一个版本(version)字段,每操作一次,将那条记录的版本号加1.也就是先查询出那条记录,获取出version字段,如果要对那条记

MySql共享锁和排它锁

共享锁和排他锁 1.共享锁: 读锁.X锁,在查询时生效,多个事务在查询同一个数据时共享一把锁,但是不能作用于修改数据,在select语句后添加 lock in share mode : 2.排他锁:在insert.update和delete时生效,获取排他锁的事务在修改一条数据时,其他锁不能存在于这条数据上(如其它排它锁和共享锁),也就是说只有获取了排他锁的这个事务可以操作修改数据,IMySQL InnoDB引擎默认添加排他锁. 场景 参考:https://www.cnblogs.com/bob

mysql共享锁与排它锁

共享锁shared lock(也叫读锁read lock)又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁.这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改.共享锁不阻塞共享锁,阻塞排它锁 排他锁exclusive lock(也叫writer lock)又称写锁.若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁.这保证了其他事务在T释放A上

MySQL中的锁(表锁、行锁,共享锁,排它锁,间隙锁)

本文参考: http://mysqlpub.com/thread-5383-1-1.html http://blog.csdn.net/c466254931/article/details/53463596 有很多是转载合并过来. 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的 计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所有数据库必须解决的一 个问题,锁冲突也是影响数据库并发访问性能的一个重

MySQL InnoDB存储引擎排它锁和共享锁的研究

1,共享锁实验 session1 在session1建表lisa并插入数据 mysql> create table lisa(name char(10),age int(5)); mysql> insert into lisa values('lisa','26'); 加给age=26这一行加共享锁 mysql> set autocommit=0; mysql> select * from lisa where age=26 lock in share mode; mysql>

共享锁(S锁)和排它锁(X锁)

释义 共享锁:(读取)操作创建的锁.其他用户可以并发读取数据,但任何事物都不能获取数据上的排它锁,直到已释放所有共享锁. 共享锁(S锁)又称为读锁,若事务T对数据对象A加上S锁,则事务T只能读A:其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁.这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改. 排它锁 排它锁:排它锁又称为写锁((eXclusive lock,简记为X锁)),若事物T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类