事务内存:软件与硬件实现解析
1. 无阻塞原子对象(FreeObject 类)
1.1 原理概述
无阻塞原子对象实现中,每个对象有当前事务、旧版本和新版本等信息。通过引入间接层(Locator 对象)来实现多字段的原子更新。当事务读取或写入对象时,会经过一系列步骤确保数据的一致性和事务的序列化。
1.2 代码结构
以下是 FreeObject 类的部分代码:
public class FreeObject<T extends Copyable<T>>
extends TinyTM.AtomicObject<T> {
AtomicReference<Locator> start;
private class Locator {
Transaction owner;
T oldVersion;
T newVersion;
...
}
...
}
1.3 openWrite() 方法
该方法用于获取对象版本并进行修改,具体步骤如下:
1. 测试线程自身的事务状态:
- 如果状态为已提交(COMMITTED),则直接更新对象。
- 如果状态为已中止(ABORTED),则抛出 AbortedException 异常。
- 如果状态为活动(ACTIVE),则继续后续操作。
2. 检查是否已为写入打开该对象,如果是则直接返回新版本
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



