首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事务锁定2算法可串行化吗?

事务锁定2算法可串行化吗?
EN

Stack Overflow用户
提问于 2014-12-12 23:58:57
回答 1查看 101关注 0票数 2

考虑两个线程A和B

  • A.readset与B.writeset相交
  • B.readset不与A.writeset相交
  • A.writeset不与B.writeset相交

它们同时提交: A.lock -> A.validation -> B.lock -> B.validation -> (A、B安装更新)

这不是可串行化的,因为B可以在A提交之前覆盖A的读取吗?

EN

回答 1

Stack Overflow用户

发布于 2014-12-25 11:24:30

它是可序列化的,因为写入事务A的写集的值依赖于A的readset的缓存的值,这是在验证过程中确认的。B对A的读集的覆盖不会影响A的读集的缓存值,而A的写入是基于该值的。写入事务A的写集的值与事务A在事务B启动之前运行完成时所写的值完全相同,因此它是可序列化的。

示例

我们有一个事务内存,由3个变量X,Y,Z= X1,Y1,Z1组成

事务A读取X并用依赖于X (X + P)的值写入Y,事务B读取Z并用依赖于Z (Z + Q)的值写入X。

序列化执行

  • 事务A:锁定Y,验证X= X1。
  • 事务A:设置Y= X1 +P并提交。
  • 事务B:锁X,验证Z= Z1。
  • 事务B:设置X= Z1 +Q并提交
  • 最终结果:(X,Y,Z) = (Z1 + Q,X1 + P,Z1)

交错执行

  • 事务A:锁定Y,验证X= X1。
  • 事务B:锁X,验证Z= Z1。
  • 事务B:设置X= Z1 +Q并提交(在A提交之前写入A的readset X)
  • 事务A:设置Y= X1 +P并提交(使用缓存值X而不是最新值)
  • 最终结果:(X,Y,Z) = (Z1 + Q,X1 + P,Z1) (与串行执行相同)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27453984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档