|
图11-3-3:托马斯写规则的示例图
|
如图11-3-3所示,TS(T3)<TS(T4),假设T3的read(Q)和T4的write(Q)都成功执行,则W-TS(Q)=TS(T4)。当T3试图执行write(Q)时,由于TS(T3)<W-TS(Q)=TS(T4),该操作被拒绝且事务T3回滚。
��虽然按照时间戳排序协议的要求T3应该回滚,但实际上是没有必要的。为什么呢?因为T4已经写入了Q,而T3想要写入的Q值将永远不会被读到。原因如下:
��⑴�满足TS(Ti)<W-TS(Q)=TS(T4)的任何事务Ti试图进行read(Q)操作时均被回滚;
��⑵�满足TS(Tj)>W-TS(Q)=TS(T4)的任何事务Tj必须读入由T4而不是T3写入的Q值。
��因此,结论就是:T3的write(Q)操作已过时,可以忽略。实际的串行顺序如图11-3-4所示:
|
图11-3-4:可以忽略的写操作

|
��综上所述,Thomas(托马斯)写规则表达如下:
��当事务Ti发出write(Q)操作时:
��①�若TS(Ti)<R-TS(Q),则Ti产生的Q值是先前所需要的,但系统已假定该值不会被产生。因此write操作被拒绝,Ti回滚;
��②�若TS(Ti)<W-TS(Q),则Ti试图写入的Q值已经过时。因此该write操作可被忽略;
��③�其他情况下执行write操作,并将W-TS(Q)的值设为TS(Ti)。 |
|