返回顶部
首页 > 资讯 > 数据库 >PostgreSQL Locks中LOCK结构体是什么
  • 687
分享到

PostgreSQL Locks中LOCK结构体是什么

2024-04-02 19:04:59 687人浏览 独家记忆
摘要

本篇内容主要讲解“postgresql Locks中LOCK结构体是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Postgresql Locks中LOCK

本篇内容主要讲解“postgresql Locks中LOCK结构体是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Postgresql Locks中LOCK结构体是什么”吧!

一、LOCK Struct


typedef struct LOCKTAG
{
    uint32      locktag_field1; 
    uint32      locktag_field2; 
    uint32      locktag_field3; 
    uint16      locktag_field4; 
    uint8       locktag_type;   
    uint8       locktag_lockmethodid;   
} LOCKTAG;

typedef struct LOCK
{
    
    LOCKTAG     tag;            
    
    LOCKMASK    grantMask;      
    LOCKMASK    waitMask;       
    SHM_QUEUE   procLocks;      
    PROC_QUEUE  waitProcs;      
    int         requested[MAX_LOCKMODES];   
    int         nRequested;     
    int         granted[MAX_LOCKMODES]; 
    int         nGranted;       
} LOCK;
#define LOCK_LOCKMETHOD(lock) ((LOCKMETHODID) (lock).tag.locktag_lockmethodid)
---------------------------------------------------------------------------
The lock manager's LOCK objects contain:
LOCK结构体包括:
tag -
    The key fields that are used for hashing locks in the shared memory
    lock hash table.  The contents of the tag essentially define an
    individual lockable object.  See include/storage/lock.h for details
    about the supported types of lockable objects.  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 LOCKTAG
    so that there are no padding bytes.)
tag - 
    该键域用于标记共享内存lock哈希表中的hashing locks.标记tag的内容本质上定义了
    一个独立的可定对象.关于已支持的可锁定对象类型的详细信息可参考include/storage/lock.h.
    之所以定义为一个单独的结构是为了确保能够把归零正确的字节数.
    编译器可能插入到结构体中的所有对齐字节数正确被归零是很很重要的,否则的话哈希的计算会是随机的.
    (当前来看,定义结构体LOCKTAG以避免对齐字节)
grantMask -
    This bitmask indicates what types of locks are currently held on the
    given lockable object.  It is used (against the lock table's conflict
    table) to determine if a new lock request will conflict with existing
    lock types held.  Conflicts are determined by bitwise AND operations
    between the grantMask and the conflict table entry for the requested
    lock type.  Bit i of grantMask is 1 if and only if granted[i] > 0.
grantMask -
    该bitmask表示在给定的可锁定对象上持有了哪些类型的locks.
    该字段用于确定新申请的锁是否会与现存的锁存在冲突.
    冲突通过grantMask和请求锁类型的冲突表条目的bitwise AND操作实现.
    当且仅当granted[i] > 0,grantMask的第i位为1.
waitMask -
    This bitmask shows the types of locks being waited for.  Bit i of waitMask
    is 1 if and only if requested[i] > granted[i].
waitMask -
    该字段标记了正在等待的锁类型.当且仅当requested[i] > granted[i],waitMask中的第1位为1.
procLocks -
    This is a shared memory queue of all the PROCLOCK structs associated with
    the lock object.  Note that both granted and waiting PROCLOCKs are in this
    list (indeed, the same PROCLOCK might have some already-granted locks and
    be waiting for more!).
procLocks -
    与lock object相关的PROCLOCK结构体在共享内存中的队列.
    注意链表中存在granted和waiting PROCLOCKs.
    (实际上,同一个PROCLOCK可能有已授予的locks但正在等待更多的锁)    
waitProcs -
    This is a shared memory queue of all PGPROC structures corresponding to
    backends that are waiting (sleeping) until another backend releases this
    lock.  The process structure holds the infORMation needed to determine
    if it should be woken up when the lock is released.
waitProcs -
    对应等待其他后台进程释放锁的后台进程的PGPROC结构体在共享内存中的队列.
    进程结构体保存了用于确定在锁释放时是否需要唤醒的相关信息.
nRequested -
    Keeps a count of how many times this lock has been attempted to be
    acquired.  The count includes attempts by processes which were put
    to sleep due to conflicts.  It also counts the same backend twice
    if, for example, a backend process first acquires a read and then
    acquires a write.  (But multiple acquisitions of the same lock/lock mode
    within a backend are not multiply counted here; they are recorded
    only in the backend's LOCALLOCK structure.)
nRequested -
    该字段保存了尝试获取该锁的次数.计数包括因为冲突而处于休眠状态的次数.
    如果一个进程第一次请求读然后请求写时可能会导致该进程被多次统计.    
requested -
    Keeps a count of how many locks of each type have been attempted.  Only
    elements 1 through MAX_LOCKMODES-1 are used as they correspond to the lock
    type defined constants.  Summing the values of requested[] should come out
    equal to nRequested.
requested -
    该字段保存了尝试获取多少种锁类型.只有1 -> MAX_LOCKMODES-1被使用,因为这对应了锁类型常量.
    计算requested数组的和应等于nRequested.    
nGranted -
    Keeps count of how many times this lock has been successfully acquired.
    This count does not include attempts that are waiting due to conflicts.
    Otherwise the counting rules are the same as for nRequested.
nGranted -
    成功获取该锁的次数.该计数不包括因为冲突而等待的次数.因此该计数规则与nRequested一样.
granted -
    Keeps count of how many locks of each type are currently held.  Once again
    only elements 1 through MAX_LOCKMODES-1 are used (0 is not).  Also, like
    requested[], summing the values of granted[] should total to the value
    of nGranted.
granted -
    保存每种类型有多少锁.1 -> MAX_LOCKMODES-1是有用的.
    与requested类似,granted[]数组的和应等于nGranted.
We should always have 0 <= nGranted <= nRequested, and
0 <= granted[i] <= requested[i] for each i.  When all the request counts
Go to zero, the LOCK object is no longer needed and can be freed.
nGranted的的范围为[0,nRequested],对于每一个granted[i]范围为[0,requested[i]].
如果所有请求变为0,那么LOCK对象不再需要,会通过free释放.

到此,相信大家对“PostgreSQL Locks中LOCK结构体是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: PostgreSQL Locks中LOCK结构体是什么

本文链接: https://lsjlt.com/news/63631.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PostgreSQL Locks中LOCK结构体是什么
    本篇内容主要讲解“PostgreSQL Locks中LOCK结构体是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL Locks中LOCK...
    99+
    2024-04-02
  • 怎么理解PostgreSQL Locks中的Lock Manager Internal Locking
    本篇内容主要讲解“怎么理解PostgreSQL Locks中的Lock Manager Internal Locking”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家...
    99+
    2024-04-02
  • C语言中结构体是什么
    这篇文章给大家分享的是有关C语言中结构体是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一.结构体定义C语言结构体由一系列相同或者不同类型的数据构成的集合,结构体类型就是以struct关键字定义的数据类型。结...
    99+
    2023-06-29
  • ADO.NET的体系结构是什么
    这篇文章主要讲解了“ADO.NET的体系结构是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ADO.NET的体系结构是什么”吧!对于ADO.NET体系结构的学习,首先碰到的就是环境的配置...
    99+
    2023-06-17
  • 什么是Oracle的体系结构
    Oracle的体系结构是指Oracle数据库系统的组成部分和相互之间的关系。Oracle的体系结构主要包括以下几个组成部分: 实...
    99+
    2024-03-02
    Oracle
  • Flume的体系结构是什么
    Flume 是一个分布式、可靠的日志收集和聚合系统。它的体系结构主要由三个组件组成: Agent:代理是 Flume 的基本工作...
    99+
    2024-04-02
  • oracle11g rac的体系结构是什么
    本篇内容介绍了“oracle11g rac的体系结构是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1...
    99+
    2024-04-02
  • Kafka组件体系结构是什么
    本篇内容主要讲解“Kafka组件体系结构是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Kafka组件体系结构是什么”吧!事件源,最终一致性,微服务,CQR...
    99+
    2024-04-02
  • C#结构体的特点是什么
    本篇内容介绍了“C#结构体的特点是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#结构体的特点是什么呢?让我们来看看:C#结构体之st...
    99+
    2023-06-18
  • Go语言空结构体是什么
    这篇文章主要为大家展示了“Go语言空结构体是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go语言空结构体是什么”这篇文章吧。什么是空结构体我们说不包含任何字段的结构体叫做空结构体,可以通过...
    99+
    2023-06-28
  • Go语言中结构体的作用是什么
    这篇文章给大家介绍Go语言中结构体的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。自定义类型type 自定义类型名 类型名 例: type NewInt&nb...
    99+
    2023-06-15
  • C#语言中结构体的作用是什么
    今天就跟大家聊聊有关C#语言中结构体的作用是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C#语言的结构体是一个比较复杂的东西,在此之上有很多需要设置的参数,否则用起来就很容易出...
    99+
    2023-06-17
  • C++中结构体和类的关系是什么
    小编给大家分享一下C++中结构体和类的关系是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、C++结构体和类的关系为什么讲C++类的大小要提到结构体呢,因为...
    99+
    2023-06-25
  • Java基础中Java的体系结构是什么
    这篇文章给大家介绍Java基础中Java的体系结构是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1 前言到目前为止Java仍然是使用最多的编程语言,随着Java以及Java社区的不断壮大,Java也早已不再是简简...
    99+
    2023-06-26
  • go语言结构体指的是什么
    这篇文章主要介绍“go语言结构体指的是什么”,在日常操作中,相信很多人在go语言结构体指的是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go语言结构体指的是什么”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-07-04
  • PostgreSQL中的BRIN索引基础知识和结构是什么
    这篇文章主要讲解了“PostgreSQL中的BRIN索引基础知识和结构是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreSQL中的BRIN索...
    99+
    2024-04-02
  • Go基础编程之什么是结构体
    本篇内容主要讲解“Go基础编程之什么是结构体”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go基础编程之什么是结构体”吧!结构体(struct)是自定义方式形成...
    99+
    2024-04-02
  • golang输出结构体的方法是什么
    在Go语言中,要输出结构体的方法有两种方式:1. 使用fmt包的Println、Printf或Print函数:这些函数可以直接打印出...
    99+
    2023-08-31
    golang
  • Go空结构体struct{}的作用是什么
    目录前言作用使用场景实现集合类型实现空通道实现方法接收者总结前言 通过这篇文章《浅谈Go结构体的基本使用》,我们初步认识了空结构体,使用unsafe.SizeOf()方法,明确知道了...
    99+
    2023-02-16
    Go空结构体struct{} Go空结构体 Go struct{}
  • go语言结构体的作用是什么
    Go语言结构体用于定义数据类型,它可以包含不同类型的字段(类似于其他编程语言中的类),用于组织和管理相关数据。结构体允许我们将数据相...
    99+
    2024-02-29
    go语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作