postgreSQL 的 lightweight lock

LWLocks are normally used to protect not-very-long sections of computation

 

typedef struct LWLock
{
slock_t   mutex;          /* Protects LWLock and queue of PGPROCs */
bool   releaseOK;      /* T if ok to release waiters */
char   exclusive;         /* # of exclusive holders (0 or 1) */
int    shared;              /* # of shared holders (0..MaxBackends) */
PGPROC    *head;   /* head of list of waiting PGPROCs */
PGPROC    *tail;       /* tail of list of waiting PGPROCs */
                                   /* tail is undefined when head is NULL */
} LWLock;

LWLock既可以封锁exclusive,又可以封锁shared, 而且一个锁可以存在一个等待队列,队列中两种锁都可以有

lw lock 有一部分是固定的,在 lwlock.h 中

typedef enum LWLockId
{
BufFreelistLock,
ShmemIndexLock,
OidGenLock,
XidGenLock,
ProcArrayLock,
SInvalReadLock,
SInvalWriteLock,
WALInsertLock,
WALWriteLock,
ControlFileLock,
CheckpointLock,
CLogControlLock,
SubtransControlLock,
MultiXactGenLock,
MultiXactOffsetControlLock,
MultiXactMemberControlLock,
RelCacheInitLock,
BgWriterCommLock,
TwoPhaseStateLock,
TablespaceCreateLock,
BtreeVacuumLock,
AddinShmemInitLock,
AutovacuumLock,
AutovacuumScheduleLock,
SyncScanLock,
/* Individual lock IDs end here */
FirstBufMappingLock,
FirstLockMgrLock = FirstBufMappingLock + NUM_BUFFER_PARTITIONS,

/* must be last except for MaxDynamicLWLock: */
NumFixedLWLocks = FirstLockMgrLock + NUM_LOCK_PARTITIONS,

MaxDynamicLWLock = 1000000000
} LWLockId;

余下的是可被分配的,总共有8317个,这是多个计算出来的

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值