本节是postgresql Loc
本节是postgresql Locks中介绍PROCLOCK结构体部分,翻译自README文件.
typedef struct PROCLOCKTAG
{
LOCK *myLock;
PGPROC *myProc;
} PROCLOCKTAG;
typedef struct PROCLOCK
{
PROCLOCKTAG tag;
PGPROC *groupLeader;
LOCKMASK holdMask;
LOCKMASK releaseMask;
SHM_QUEUE lockLink;
SHM_QUEUE procLink;
} PROCLOCK;
#define PROCLOCK_LOCKMETHOD(proclock) \
LOCK_LOCKMETHOD(*((proclock).tag.myLock))
---------------------------------------------------------------------------
The lock manager's PROCLOCK objects contain:
tag -
The key fields that are used for hashing entries in the shared memory
PROCLOCK hash table. This is declared as a separate struct to ensure that
we always zero out the correct number of bytes. It is critical that any
alignment-padding bytes the compiler might insert in the struct be zeroed
out, else the hash computation will be random. (Currently, we are careful
to define struct PROCLOCKTAG so that there are no padding bytes.)
tag.myLock
Pointer to the shared LOCK object this PROCLOCK is for.
tag.myProc
Pointer to the PGPROC of backend process that owns this PROCLOCK.
Note: it's OK to use pointers here because a PROCLOCK never outlives
either its lock or its proc. The tag is therefore unique for as long
as it needs to be, even though the same tag values might mean something
else at other times.
tag -
与LOCK结构体中的tag字段类似,用于标识共享内存中的PROCLOCK哈希表中对应的条目.
tag.mylock
指向PROCLOCK所表示的共享LOCK对象的指针
tag.myProc
指向持有该PROCLOCK的PGPROC后台进程
holdMask -
A bitmask for the lock modes successfully acquired by this PROCLOCK.
This should be a subset of the LOCK object's grantMask, and also a
subset of the PGPROC object's heldLocks mask (if the PGPROC is
currently waiting for another lock mode on this lock).
holdMask -
该PROCLOCK请求获得的lock模式位掩码.
应为LOCK's grantMask掩码的子集,同时也是PGPROC's heldlocks掩码的子集.
releaseMask -
A bitmask for the lock modes due to be released during LockReleaseAll.
This must be a subset of the holdMask. Note that it is modified without
taking the partition LWLock, and therefore it is unsafe for any
backend except the one owning the PROCLOCK to examine/change it.
releaseMask -
在LockReleaseAll执行过程中即将被释放的lock模式位掩码.
应为holdMask位掩码的子集.注意更新该值时不需要持有分区LWLock,因此除了自身的PROCLOCK外
其他后台进程是不安全的.
lockLink -
List link for shared memory queue of all the PROCLOCK objects for the
same LOCK.
lockLink -
共享内存中同一个LOCK的PROCLOCK对象队列链表链接.
procLink -
List link for shared memory queue of all the PROCLOCK objects for the
same backend.
procLink -
共享内存中同一个后台进程所有PROCLOCK对象的的链表链接.
README
--结束END--
本文标题: PostgreSQL 源码解读(221)- Locks(PROCLOCK Struct)
本文链接: https://lsjlt.com/news/46625.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0