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

3、非冲突指令的交换
��当Im和In是不同事务在相同数据项上的操作,并且其中至少有一条是write指令时,我们称Im和In是冲突的。在图10-5-6所示的调度3中,T1的write(A)与T2的read(A)指令是冲突的,而T2的指令write(A)与T1的read(B)是不冲突的,因此可以交换顺序。