✎
编程开发网
首页
C语言
C++
面试
Linux
函数
Windows
数据库
下载
搜索
当前位置:
首页
->
基础
->
数据库编程
数据库读写锁的实现(C++)(二)
2014-11-24 11:44:28
·
作者:
·
浏览:
1
标签:
数据库
读写
实现
for (set
::iterator it_index = obj->shareList.begin(); it_index != obj->shareList.end(); it_index++) { sTemp += " " + *it_index; } obj->waitingTransList.push(trId->tranId); result += "Waiting for lock (S-lock held by:" + sTemp + "\n"; } else if (shareNum == 1) { //update if (*(obj->shareList.begin()) == trId->tranId) { obj->curXLockTrans = trId->tranId; obj->shareList.clear(); result += "Upgrade to XLock granted\n"; } else { obj->waitingTransList.push(trId->tranId); result += "Waiting for lock (S-lock held by:" + *(obj->shareList.begin()) + ")\n"; } } else if (shareNum == 0) { obj->curXLockTrans = trId->tranId; trId->curLockObjList.insert(obj); result += "XLock granted\n"; } } else//当前存在写操作 { obj->waitingTransList.push(trId->tranId); result += "Waiting for lock (X-lock held by: "+ obj->curXLockTrans +")\n"; } } } void LMer::diviTransID(transId* trId, object* pObj, string& result) { if(pObj->curXLockTrans != "") { //对写操作解绑 if (pObj->curXLockTrans == trId->tranId) { pObj->curXLockTrans = ""; trId->curLockObjList.erase(pObj); result += "Lock released\n\t\t\t"; } else { result += "I can not find the transaction.\n\t\t\t"; } }//对共享读集合解绑 else { set
::iterator shareIndex = pObj->shareList.find(trId->tranId); if (shareIndex != pObj->shareList.end()) { pObj->shareList.erase(shareIndex); trId->curLockObjList.erase(pObj); result += "Lock released\n\t\t\t"; } else { result += "I can not find the transaction.\n\t\t\t"; } } //查看写等待队列 if (pObj->waitingTransList.size() != 0) { pObj->curXLockTrans = pObj->waitingTransList.front(); pObj->waitingTransList.pop(); result += "X-Lock on "+ pObj->objectName +" granted to "+ pObj->curXLockTrans +"\n"; }//查看共享队列 else if (pObj->shareList.size() != 0) { string temp = ""; for(set
::iterator it_index = pObj->shareList.begin(); it_index != pObj->shareList.end(); it_index++) { temp += " " + *it_index; } result += "S-Lock on "+ pObj->objectName +" granted to "+ temp +"\n"; } }
四、程序运行
程序数据输入如下:
运行后得到结果如下:
首页
上一页
1
2
下一页
尾页
2
/2/2