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 |