常见的锁

常见的锁

常见的有读写锁,也成为共享锁、排它锁;间隙锁;行锁、表锁;

InnoDB存储引擎会根据隔离级别自动加锁,但是也可以主动加锁;

select … … for update(排它锁); select … lock in share mode(共享锁)

1
2
3
4
5
show open tables;
//显示正在用的表,可以看表锁

show status like 'table%';
//通过table_locks_waited和table_locks_immediate状态变量,分析系统上的表锁定,

各种锁的概念

公平锁、非公平锁、自旋锁、可重入锁、偏向锁、轻量级锁、重量级锁、读写锁、互斥锁等。

公平锁与⾮公平锁
公平锁:是指按照申请锁的顺序来获取锁;
⾮公平锁:是指获取锁的顺序并不是按照申请锁的顺序,有可能后申请的⽐先申请的优先获取锁,有可能会造成优先级反转或者饥饿现象。

共享锁
共享锁,读写锁:可以被多个资源持有。

独享锁
独享锁,互斥锁:锁⼀次只能被⼀个资源所持有,其他的按照设计的策略行事,java中Synchronized而言,会进入Entry set列表等待。

乐观锁
对共享数据的操作很少或者不会发生修改的。采取的策略是更新数据的时候尝试更新,如果不对继续重试,如CAS。