LWLock(轻量级锁)主要提供对共享存储器的数据结构的互斥访问。LWLock有两种锁模式,一种为排他模式,另一种为共享模式。轻量级锁不提供死锁检测,但轻量级锁管理器在elog恢复期间被自动释放,所以持有轻量级锁的期间调用elog发出错误消息不会出现轻量级锁未释放的问题。
LWLock(轻量级锁)利用SpinLock实现,当没有锁的竞争时可以很快获得或释放LWLock。当一个进程阻塞在一个轻量级锁上时,相当于阻塞在一个信号量上,所以不会消耗CPU时间,等待的进程将会以先来后到的顺序被授予锁。
有等待队列 无死锁检测 能自动释放锁
数据结构
typedef struct LwLock{
slock_t mutex;
bool releaseOK;
char exclusive;
int shared;
PROC *head;
PROC *tail;
}
LWLock(轻量级锁)利用SpinLock实现,使用SpinLock对数据结构的mutex互斥量加/解锁即可实现对一个LWLock的互斥访问。 LWLock有两种锁模式,一种为排他模式,另一种为共享模式。通过数据结构的exclusive和shared可以区分。
带你了解Greenplum的锁管理机制
|