📜  共享锁和排他锁之间的区别

📅  最后修改于: 2021-08-27 05:06:01             🧑  作者: Mango

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

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

1.共享锁(S):

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

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

2.排他锁(X):

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

例如,考虑一种情况,当交易需要从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.