本文整理汇总了C++中Admin::lock方法的典型用法代码示例。如果您正苦于以下问题:C++ Admin::lock方法的具体用法?C++ Admin::lock怎么用?C++ Admin::lock使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Admin
的用法示例。
在下文中一共展示了Admin::lock方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: refcount
usword_t SubzoneBlockRef::refcount() const {
int refcount = 0;
Admin *admin = subzone()->admin();
SpinLock lock(admin->lock());
if (has_refcount()) {
// non-zero reference count, check the overflow table.
// BlockRef FIXME: use q instead of address in hash map?
PtrIntHashMap &retains = admin->retains();
PtrIntHashMap::iterator retain_iter = retains.find(address());
if (retain_iter != retains.end() && retain_iter->first == address()) {
refcount = retain_iter->second;
} else {
refcount = 1;
}
}
return refcount;
}
示例2: inc_refcount
usword_t SubzoneBlockRef::inc_refcount() const {
int refcount;
Admin *admin = subzone()->admin();
SpinLock lock(admin->lock());
void *block = address();
if (has_refcount()) {
// non-trivial reference count, check the overflow table.
PtrIntHashMap &retains = admin->retains();
PtrIntHashMap::iterator retain_iter = retains.find(block);
if (retain_iter != retains.end() && retain_iter->first == block) {
refcount = ++retain_iter->second;
} else {
// transition from 1 -> 2
refcount = (retains[block] = 2);
}
} else {
// transition from 0 -> 1
Thread &thread = admin->zone()->registered_thread();
thread.block_escaped(*this);
subzone()->set_has_refcount(q());
refcount = 1;
}
return refcount;
}
示例3: dec_refcount
usword_t SubzoneBlockRef::dec_refcount() const {
Admin *admin = subzone()->admin();
SpinLock lock(admin->lock());
return dec_refcount_no_lock();
}