- 读写锁
例子:A用户正在读取25号邮件,而B用于试图删除25号邮件。
解决这类问题的方法时并发控制:
共享锁(读锁)和排它锁(写锁)
- 锁粒度
加锁需要消耗资源,包括获得锁、检查锁是否已经被解除、释放锁等。
在锁和数据的安全性上平衡后,一般都是在行上加锁(row-lock)
- table-lock表锁
Mysql的基本策略、开销最小的策略,会锁定整张表,当一个用户对表进行增删改(不包括读)等操作时会先获得
写锁,会阻塞其他对该表的读写操作,当该表上没有写锁时,其他用户在才可以获得读锁,读锁之间是不互相阻塞的。
注意:
写锁比读锁优先级更高,因此一个写锁清秋可能会插入到读锁队列前面(读锁不能插入到写锁的队列前面)
- row-lock行锁
行锁可以带来最大成都的并发处理,同时也带来更大的锁开销