1、调度的简化
��事务并发执行时,只有访问相同数据项的基本操作read和write才会在事务间产生影响。换句话说,对于数据项Q,在read(Q)和write(Q)指令之间,事务可以对驻留在事务局部缓冲区中的数据项Q的拷贝执行任意的操作序列。所以,从调度的角度来看,事务仅有的重要操作是read与write指令,因此,调度中通常只显示read和write指令如
图10-5-1
所示。
图10-5-1:简化后的调度3
2、指令的可交换性
��对于一个调度S来说,假设I
m
和I
n
(m<n)分别是属于事务T
i
和T
j
的两条连续的读写指令:
��-�如果I
m
和I
n
分别访问不同的数据项,则交换I
m
和I
n
的顺序不会影响调度中任何指令的结果;
��-�如果I
m
和I
n
访问相同的数据项Q,则两者的顺序就不能随便交换。
��下面就详细介绍调度中指令的可交换性:
��
⑴�read-read指令
图10-5-2:read-read指令
如
图10-5-2
所示,由于I
m
和I
n
都是read指令,无论谁先执行或谁后执行,它们读到的都是同一个Q值,所以这两条指令不冲突,可以交换先后顺序。
��
⑵�read-write指令
图10-5-3:read-write指令
如
图10-5-3
所示,由于I
m
是read指令,I
n
是write指令,如果I
m
在I
n
之前,则I
m
读到的是I
n
写之前的Q值;如果I
m
在I
n
之后,则I
m
读到的是I
n
写之后的Q值。所以这两条指令冲突,不可以交换先后顺序。
��
⑶�write-read指令
图10-5-4:write-read指令
如
图10-5-4
所示,由于I
m
是write指令,I
n
是read指令,如果I
m
在I
n
之前,则I
n
读到的是I
m
写之后的Q值;如果I
m
在I
n
之后,则I
n
读到的是I
m
写之前的Q值。所以这两条指令冲突,不可以交换先后顺序。
��
⑷�write-write指令
图10-5-5:write-write指令
如
图10-5-5
所示,由于I
m
是write指令,I
n
也是write指令,交换I
m
和In的顺序,并不影响各自的事务。但是指令I
m
和I
n
的先后顺序将会影响调度的下一条read(Q)指令读到的Q值;如果I
m
和I
n
是这个调度的最后的写Q的指令,则指令I
m
和I
n
的先后顺序将会影响Q的最终值。所以这两条指令冲突,不可以交换先后顺序。
3、非冲突指令的交换
��当I
m
和I
n
是不同事务在相同数据项上的操作,并且其中至少有一条是write指令时,我们称Im和I
n
是冲突的。在
图10-5-6
所示的调度3中,T
1
的write(A)与T
2
的read(A)指令是冲突的,而T2的指令write(A)与T1的read(B)是不冲突的,因此可以交换顺序。