ceph RWLock源码分析
源文件:
src/commom/RWLock.h
读写锁
class RWLock {
主要数据成员:
pthread_rwlock_t L: pthread库中的读写锁
string name: 读写锁的名称
atomic nrlock, nwlock: 读锁和写锁的引用计数
主要成员函数:
RWLock():
读写锁的构造函数会根据输入的参数设置读写锁的属性,主要是防止长时间的读造成写的饿死情况.
is_locked():
is_wlocked():
is_rlocked():
判断锁的状态.
unlock():
读锁和写锁的解锁都基于它进行解锁操作
get_read():
put_read():
try_get_read():
读锁的lock, unlock和try_lock
get_write():
put_write():
try_get_write():
写锁的lock,unlock和try_lock
get(bool):
参数为true,写锁加锁,否则读锁加锁
}
读锁
class RLocker {
构造函数加锁,析构函数解锁,主要用于语句块中
}
写锁
class WLocker {
构造函数加锁,析构函数解锁,主要用于语句块中
}
Context
Context和RWLock基本相同,只不过多了一个写锁强占读锁的函数.
class Context {
void promote(): 读锁可以被写锁强占.
}