Concurrency 读/写语义与对象语义中的冲突操作

Concurrency 读/写语义与对象语义中的冲突操作,concurrency,semantics,Concurrency,Semantics,读/写语义和对象语义的含义是什么?为什么下面的说法是正确的 借方/贷方写入银行账户,在读/写语义下定义为冲突,而在对象语义下则不冲突 如果没有更多的背景,我不确定这是否回答了这个问题 以下PDF中的第2.1-2节提供了概述 这里有一些要点 读/写 “读/写模型的两阶段锁定协议为每个对象维护两种类型的锁,即读锁和写锁。事务必须先获得读(写)锁,然后才能读(写)一个数据对象。如果两个锁都应用于同一个数据对象,并且其中至少有一个是写锁,则来自不同事务的两个锁冲突。如果锁与该数据对象上的任何其他锁冲突

读/写语义和对象语义的含义是什么?为什么下面的说法是正确的

借方/贷方写入银行账户,在读/写语义下定义为冲突,而在对象语义下则不冲突


如果没有更多的背景,我不确定这是否回答了这个问题

以下PDF中的第2.1-2节提供了概述

这里有一些要点

读/写

“读/写模型的两阶段锁定协议为每个对象维护两种类型的锁,即读锁和写锁。事务必须先获得读(写)锁,然后才能读(写)一个数据对象。如果两个锁都应用于同一个数据对象,并且其中至少有一个是写锁,则来自不同事务的两个锁冲突。如果锁与该数据对象上的任何其他锁冲突,则事务无法获得锁。”

所以如果有人在写,你就不能读;如果有人在读,你就不能写。但如果有人在读书,你也可以读书

反对

“对象维护一个状态并提供一组操作,作为事务访问和修改对象状态的唯一手段……即使两个操作都是更新操作,也可以同时执行两个交换操作。”

现在,您可以允许对操作顺序不重要的事物进行读/写


他们接着解释了一笔存款和一笔取款是如何不通勤的(取款可能会因为资金不足而被拒绝),但两笔存款可以通勤的。这两个存款将相互阻塞,并且在读/写操作下必须按顺序发生,但在对象语义下,它们可以同时发生。

好吧,考虑到您已经将“(简单地说)。。。我要试试看

首先,当将“值”或“数据”作为对象时,这个问题最有意义。这是在OODB中讨论数据的典型方式。因此,存储的银行账户余额被称为“数据对象”,您可以获取访问该值的锁(读取、写入、删除等)

在这种情况下:读/写语义是“更改数据的含义”,根据它我们可以决定在锁定的事务中可以进行哪些读或写。相反,对象语义允许您以任何您认为合适的方式改变值,只要您持有相关的锁

对于银行账户,您需要锁定,这不允许在同一交易中同时发生借方和贷方(甚至多个借方或多个贷方)(因此它们仍然被视为不同的操作)。这意味着您的读/写语义定义了多个信用/借记冲突

e、 g.如果在单笔交易范围内,我将10英镑贷记到银行账户,将7英镑贷记到银行账户(即使用对象语义),则生成的银行对账单将显示3英镑的单笔贷记,而不是两个单独的分录


通过使用读/写语义定义锁定逻辑,您可以确保事务不会以这种方式组合。

我猜您可能是我认识的人,因为我正在寻找与这篇过去文章完全相同的答案……您能为这个问题提供更多的上下文吗?例如,您在哪里遇到这些术语?是在一本书或一篇文章中,你可以引用?你能再引述一点吗?这是剑桥大学过去的一道试卷。我相信,它正在讨论TSO在并发控制中的使用。