|
(一)启动规则:当一个新事务的执行请求,创建和执行一个乐观的影子
; |
|
(1)计算阴影的数量
; |
|
(2)悲观的阴影(
)←0; |
|
(3)读取组(
)←φ; |
|
(4)WriteSet (
)←φ; |
|
(B)读规则:当一个事务希望阅读对象X,冲突可能会发现 |
|
(1)读取组(
)←{X}; |
|
(2)如果(悲观的阴影(
)<N(
)−1){ |
|
(2.1)叉一个新的悲观的影子
; |
|
(2.2)等待(
)←{(
),X}; |
|
(2.3)悲观的影子(
)←悲观的影子(
)+ 1}; |
|
(2.4)else if(悲观的阴影
)≮N(
)−1)然后{中止(
)}; |
|
(C)编写规则:当一个事务希望写对象X,冲突可能会发现 |
|
(1)WriteSet (
)←{X}; |
|
(2)如果(悲观的阴影(
)<N(
)−1){ |
|
(2.1)叉一个新的悲观的影子
; |
|
(2.1.1)等待(
)←{(
),X}; |
|
(2.1.2)悲观的影子(
)←悲观的影子((
)+ 1}; |
|
其他(2.2)如果(存在冲突){ |
|
(2.2.1)中止的影子和替换它通过一个新的影子
; |
|
(2.2.2)等待(
)←{(
),X}; |
|
(3)else if(悲观的阴影
)=N(
)−1){中止}; |
|
(D)阻断规则:阻止悲观的影子最早的时候,希望继续阅读对象X |
|
(E)提交规则:无论何时决定提交一个乐观的影子代表一个事务
,然后 |
|
(1)中止其他除了悲观的阴影
; |
|
(2)处理冲突的一切
; |