本文整理汇总了C++中LockManager::lock方法的典型用法代码示例。如果您正苦于以下问题:C++ LockManager::lock方法的具体用法?C++ LockManager::lock怎么用?C++ LockManager::lock使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LockManager
的用法示例。
在下文中一共展示了LockManager::lock方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: resId
TEST(LockManager, MultipleConflict) {
LockManager lockMgr;
const ResourceId resId(RESOURCE_COLLECTION, std::string("TestDB.collection"));
MMAPV1LockerImpl locker;
TrackingLockGrantNotification notify;
LockRequest request[6];
for (int i = 0; i < 6; i++) {
request[i].initNew(&locker, ¬ify);
if (i == 0) {
ASSERT(LOCK_OK == lockMgr.lock(resId, &request[i], MODE_X));
} else {
ASSERT(LOCK_WAITING == lockMgr.lock(resId, &request[i], MODE_X));
}
ASSERT(request[i].mode == MODE_X);
ASSERT(request[i].recursiveCount == 1);
}
ASSERT(notify.numNotifies == 0);
// Free them one by one and make sure they get granted in the correct order
for (int i = 0; i < 6; i++) {
lockMgr.unlock(&request[i]);
if (i < 5) {
ASSERT(notify.numNotifies == i + 1);
}
}
}
示例2: resId
TEST(LockManager, Downgrade) {
LockManager lockMgr;
const ResourceId resId(RESOURCE_COLLECTION, std::string("TestDB.collection"));
LockState locker1;
TrackingLockGrantNotification notify1;
LockRequest request1;
request1.initNew(&locker1, ¬ify1);
ASSERT(LOCK_OK == lockMgr.lock(resId, &request1, MODE_X));
LockState locker2;
TrackingLockGrantNotification notify2;
LockRequest request2;
request2.initNew(&locker2, ¬ify2);
ASSERT(LOCK_WAITING == lockMgr.lock(resId, &request2, MODE_S));
ASSERT(request2.recursiveCount == 1);
lockMgr.downgrade(&request1, MODE_S);
ASSERT(notify2.numNotifies == 1);
ASSERT(request2.recursiveCount == 1);
lockMgr.unlock(&request1);
ASSERT(request1.recursiveCount == 0);
lockMgr.unlock(&request2);
ASSERT(request2.recursiveCount == 0);
}
示例3: checkConflict
// Lock conflict matrix tests
static void checkConflict(LockMode existingMode, LockMode newMode, bool hasConflict) {
LockManager lockMgr;
const ResourceId resId(RESOURCE_COLLECTION, std::string("TestDB.collection"));
MMAPV1LockerImpl lockerExisting;
TrackingLockGrantNotification notifyExisting;
LockRequest requestExisting;
requestExisting.initNew(&lockerExisting, ¬ifyExisting);
ASSERT(LOCK_OK == lockMgr.lock(resId, &requestExisting, existingMode));
MMAPV1LockerImpl lockerNew;
TrackingLockGrantNotification notifyNew;
LockRequest requestNew;
requestNew.initNew(&lockerNew, ¬ifyNew);
LockResult result = lockMgr.lock(resId, &requestNew, newMode);
if (hasConflict) {
ASSERT_EQUALS(LOCK_WAITING, result);
} else {
ASSERT_EQUALS(LOCK_OK, result);
}
lockMgr.unlock(&requestNew);
lockMgr.unlock(&requestExisting);
}