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

时间:2013-01-10 15:26:23

标签: concurrency semantics

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

  

借记/贷记写入银行账户并被定义为在读/写语义下发生冲突,而在对象语义下却没有。

2 个答案:

答案 0 :(得分:2)

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

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

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

以下是一些要点。

读/写

“用于读/写的模型将两相锁定协议保持两种类型的锁的每个对象,即读锁和写锁。事务必须obtaion一个读(写)锁之前它可以读取(写入)的数据对象从如果施加相同的数据对象在两个锁和它们中的至少一个为写锁定。事务不能获得锁不同的事务冲突两把锁,如果锁冲突与该数据对象上的任何其他的锁。“

所以如果另一个人正在阅读,你就无法阅读另一个是写作还是写作。但你可以阅读其他人是否正在阅读。

对象

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

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

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

答案 1 :(得分:0)

好吧,考虑到你已经“(用简单的话说)”......我会对此有所了解。

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

鉴于上下文:读/写语义是“更改数据的意义”,基于此我们可以决定在锁定的事务中可以发生哪些读取或写入。相比之下,对象语义允许您只要持有相关锁,就可以以任何您认为合适的方式改变值。

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

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

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