什么是锁
锁是一种机制,用于管理并发访问和维护数据一致性。它确保多个操作不会同时修改相同的数据,从而避免数据冲突。
假设图书馆里有一批热门书籍,很多人都想借阅。图书馆为了管理这些书籍的借阅过程,引入了不同类型的“锁”。
锁的种类
1. 共享锁(S锁)
共享锁允许多个事务并发读取同一数据,但不能进行写操作。读读不互斥,多个事务可以同时获取共享锁。
图书馆允许多个人同时阅读同一本书,但不能带走。也就是说,书架上的书可以被很多人同时拿下来翻阅,但不能被借走。
2.排他锁(X锁)
排他锁允许一个事务进行写操作,同时阻止其他事务读取或写入。写写互斥,读写互斥,只有一个事务能持有排他锁。
图书馆规定,当一个人借书时,其他人不能同时借这本书,也不能翻阅这本书。借书的人会把书从书架上拿走,直到他归还后,其他人才可以继续借阅或查看这本书。
3.意向共享锁(IS锁)
意向共享锁表示一个事务有读取某些资源的意图。多个事务可以同时获取意向共享锁和意向排他锁。
图书馆规定,一个人如果计划去翻阅某本书,他可以提前在图书馆的系统里登记自己的意图,这样系统知道将来可能会有很多人同时查看这本书。登记意图的人还没有拿到书,但图书馆知道他有这个计划。
4.意向排他锁(IX锁)
意向排他锁表示一个事务有写入某些资源的意图。多个事务可以同时获取意向排他锁,但不能获取共享锁或排他锁。
图书馆规定,一个人如果计划去借某本书,他可以提前在图书馆的系统里登记自己的意图,这样系统知道将来可能会有很多人要借这本书。登记意图的人还没有拿到书,但图书馆知道他有这个计划。
图书馆场景
假设图书馆里有一本《哈利波特与数据结构》的书,多个读者对这本书感兴趣。
共享锁(S锁):
多个读者可以同时在图书馆翻阅《哈利波特与数据结构》,但不能借走。