1

当我了解到有时称为“乐观并发控制”的“乐观锁定”时,实际上并没有锁。一个典型的实现是 CAS(比较和交换)。所以我想知道没有锁定,为什么这仍然被称为“乐观锁定”?是否有任何历史原因,因为这个术语起源于数据库世界?

4

1 回答 1

1

正如您正确指出的那样,事务不会在它尝试更新的行/持久对象上获取任何锁。但是,您可能也知道乐观锁定是根据版本控制原理工作的。含义...数据库表记录的版本列(如果已设置)将在每次事务更新时递增。此外,任何尝试更新特定记录的事务都需要将检索时记录的版本号与更新时记录的版本号进行比较。它类似于拥有一个名为版本号的密钥(如在 Lock-Key 中)并尝试查看它是否匹配..如果与数据库中的内容匹配(意味着..该记录同时未被另一个 tx 更新),之后您将执行更新。如果匹配失败(记录由另一个 tx 更新......并且您的密钥将不再起作用)。

因此,版本控制/选择锁定看起来好像您有一个几乎不存在的锁的密钥(称为版本)。而lock的真正含义可以在你当前版本的记录匹配失败,PREVENTS(意思是LOCKED)你更新记录的情况下理解。

于 2016-04-26T05:32:57.357 回答