📄 isotest20.c
字号:
#include "common.h"//READ_UNCOMMITTED isolation testing // T1 T2// -------------------------// Read// Update// Read// T1 should read updated tuple by T2void* runTest1(void *p);void* runTest2(void *p);int *p1RetVal = NULL;int *p2RetVal = NULL;int selectDone=0, updateDone=0, allDone=0;int main(){ Connection conn; DbRetVal rv = conn.open("root", "manager"); if (rv != OK) { printf("Error during connection %d\n", rv); return 1; } DatabaseManager *dbMgr = conn.getDatabaseManager(); int ret = createTable(dbMgr); if (ret != 0) { return 1; } rv = conn.startTransaction(); if (rv != OK) {printf ("Unable to start trans\n"); return 1; } rv = insert(dbMgr, 100, false); if (rv != OK) { printf("Unable to insert\n"); return 2; } conn.commit(); printf("Tuple inserted\n"); pthread_t thr[2]; int *status1, *status2; pthread_create (&thr[0], NULL, &runTest1, NULL); pthread_create (&thr[1], NULL, &runTest2, NULL); printf("All threads started\n"); pthread_join(thr[0], (void**)&status1); pthread_join(thr[1], (void**)&status2); ret = 0; if (*status1 != 0 || *status2 != 0) ret = 1; dbMgr->dropTable("t1"); conn.close(); if (p1RetVal) { delete p1RetVal; p1RetVal = NULL; } if (p2RetVal) { delete p2RetVal; p2RetVal = NULL; } return ret;}void* runTest1(void *message){ Connection conn; DbRetVal rv = conn.open("root", "manager"); if (rv != OK) { printf("Error during connection %d\n", rv); return NULL; } DatabaseManager *dbMgr = conn.getDatabaseManager(); if (dbMgr == NULL) { printf("Auth failed\n"); return NULL;} rv = conn.startTransaction(READ_UNCOMMITTED); if (rv != OK) return NULL; printf("Thread and pid is %d %lu\n", os::getpid(), os::getthrid()); p1RetVal = new int(); *p1RetVal = 0; rv = select(dbMgr, 100, true); if (rv != OK) { printf("Test Failed:first thread read failed \n"); *p1RetVal = 1; } selectDone=1; while (updateDone != 1) {::sleep(1); } rv = select(dbMgr, 100, true, true); if (rv == OK) { printf("Test passed:first thread read succeeded \n"); *p1RetVal = 0; } allDone =1; conn.commit(); rv = conn.close(); pthread_exit(p1RetVal);}void* runTest2(void *message){ Connection conn; DbRetVal rv = conn.open("root", "manager"); if (rv != OK) { printf("Error during connection %d\n", rv); return NULL; } DatabaseManager *dbMgr = conn.getDatabaseManager(); if (dbMgr == NULL) { printf("Auth failed\n"); return NULL;} rv = conn.startTransaction(READ_UNCOMMITTED); if (rv != OK) return NULL; printf("Thread and pid is %d %lu\n", os::getpid(), os::getthrid()); while (selectDone != 1) {::sleep(1); } p2RetVal = new int(); *p2RetVal = 0; rv = update(dbMgr, 100, true); if (rv != OK) { printf("Test Failed:second thread failed to update\n"); *p2RetVal = 1; } updateDone = 1; while (allDone !=1) ::sleep(1); conn.commit(); conn.close(); pthread_exit(p2RetVal);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -