0

读/写语义和对象语义的含义(简单来说)是什么?为什么以下陈述是正确的?

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

4

2 回答 2

1

没有更多上下文,我不确定这是否能回答问题。

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

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.48.4184&rep=rep1&type=pdf

这里有一些关键点。

读/写

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

因此,如果另一个人在写,你就不能阅读,如果另一个人在读,你就不能写。但是如果另一个人正在阅读,你可以阅读。

目的

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

现在,您可以允许对操作顺序无关紧要的事物进行读/写。

他们继续解释存款和取款如何不通勤(由于资金不足,提款可能会被拒绝),但两次存款可以通勤。这两个存款会相互阻塞,并且必须在读/写下按顺序发生,但在对象语义下,它们可以同时发生。

于 2013-04-02T19:10:40.193 回答
0

好吧,考虑到你已经输入了“(简单来说)”......我会对此进行尝试。

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

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

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

例如,如果在单笔交易的范围内,我将 10 英镑贷记到银行账户并从银行账户借记 7 英镑(即使用对象语义),则生成的银行对账单将显示 3 英镑的单笔贷记,而不是两个单独的条目。

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

于 2013-04-02T22:37:41.573 回答