Algorithm-2: Transaction Dispatcher

Input: WRQ: Waiting Read Queue, WWQ: Waiting Write Queue, TC: Thread Code, RT: Read Turn, Nmr: Numbers of Maximum Read, Nmw: Numbers of Maximum Write.

Output: WEQ: Waiting Execution Queue.

1: WHILE (thread is not stoped)

2: WHILE (TC is not self)

3: await();

4: END WHILE

5: IF (RT is read turn) THEN

6: IF (WRQ is not empty) THEN

7: r ←calBatchSizeOfRead(Nmr);

8: FOR (i=0;i

9: WEQ.put(WRQ.take());

10: END FOR

11: END IF

12: RT ← false;

13: ELSE

14: IF (WWQ is not empty) THEN

15: w ← calBatchSizeOfWrite(Nmw);

16: FOR (j=0;j

17: IF (WWQ[j] is not conflict) THEN

18: WEQ.put(WWQ.take());

19: ELSE

20: break;

21: END IF

22: END FOR

23: END IF

24: RT ← true;

25: END IF

26: IF (WEQ is not Empty) THEN

27: notifyTransExecutor();

28: END IF

29: END WHILE