📜  共享锁和排他锁的区别

📅  最后修改于: 2021-09-11 04:44:17             🧑  作者: Mango

确保事务隔离性的方法之一是要求以互斥的方式访问数据项。这意味着,当一个事务正在访问一个数据项时,没有其他事务可以修改该数据项。因此,用于实现需求的最常用方法是仅当事务当前持有该数据项的时才允许该事务访问该数据

因此,需要锁定操作以确保事务的隔离。

1.共享锁(S):

  • 共享锁也称为读锁,仅用于读取数据项。
  • 共享锁支持读完整性。它们确保在只读请求期间记录不会被更新。
  • 共享锁还可用于防止任何类型的记录更新。
  • 它由Lock-S表示。
  • 使用 Lock-S 指令请求 S-lock。

例如,考虑初始 A=100 并且有两个事务正在读取 A 的情况。如果其中一个事务想要更新 A,在这种情况下其他事务将读取错误的值。但是,共享锁会阻止它更新,直到它完成读取。

2. 独占锁 (X) :

  • 使用排他锁,可以读取和写入数据项。也称为写锁。
  • 排他锁可防止任何其他储物柜获得该对象上的任何类型的锁。
  • 它们一次只能由一笔交易拥有。
  • 它表示为 Lock-X。
  • 使用 Lock-X 指令请求 X-lock。

例如,考虑一个交易需要从 A 中扣除 50 时最初 A=100 的情况。我们可以通过在其上放置 X 锁来允许该交易。因此,当任何其他事务想要读取或写入时,排他锁会阻止它。

锁兼容性矩阵:

锁的兼容性矩阵

  • 如果事务 T1 持有数据项 A 中的共享锁,则控制管理器可以将共享锁授予事务 T2,因为兼容性为 TRUE,但它不能授予排他锁,因为兼容性为 FALSE。
  • 简单来说,如果事务 T1 正在读取数据项 A,那么同一数据项 A 可以被另一个事务 T2 读取,但不能被另一个事务写入。
  • 类似地,如果某个事务中的数据项上持有排他锁(即用于读和写操作的锁),则其他事务无法获取共享锁或排他锁,因为兼容性函数表示为 FALSE。

共享锁和排他锁的区别:

S.No. Shared Lock Exclusive Lock
1. Lock mode is read only operation. Lock mode is read as well as write operation.
2. Shared lock can be placed on objects that do not have an exclusive lock already placed on them. Exclusive lock can only be placed on objects that do no have any other kind of lock.
3. Prevents others from updating the data. Prevents others from reading or updating the data.
4. Issued when transaction wants to read item that do not have an exclusive lock. Issued when transaction wants to update unlocked item.
5. Any number of transaction can hold shared lock on an item. Exclusive lock can be hold by only one transaction.
6. S-lock is requested using lock-S instruction. X-lock is requested using lock-X instruction.