当前位置: 首页 > news >正文

【0407】Postgres内核 Condition variables (ConditionVariable)设计机制 ①

文章目录

  • 1. Postgres 条件变量
    • 1.1 Condition variables 类型声明
    • 1.2 Condition variables 实现
  • 2. 相关函数 功能说明
    • 2.1 初始化一个条件变量
    • 2.2 准备在给定的条件变量上进行等待。
    • 2.3 等待给定的条件变量被发出信号(触发)
    • 2.4 等待条件变量被触发或超时时间到达
    • 2.5 取消任何未决(待定)的sleep操作
    • 2.6 唤醒在条件变量(CV)上 sleeping 时间最长的进程(若存在的话)
    • 2.7 唤醒在给定条件变量上处于睡眠状态的所有进程

1. Postgres 条件变量

Postgres 内核中 “条件变量为一个进程提供了一种等待特定条件出现的方式,而无需知晓其等待的进程的具体身份。 与轻量级锁(LWLock)的等待不同,对条件变量的等待是可以被中断的。条件变量在动态共享内存段中使用是安全可靠的。”

条件变量(condition variables) 实现于 condition_variable.c 文件。

条件变量是一种用于等待特定条件达成的方法。按照惯例,条件变量支持三项操作:
(1)sleep;
(2)信号(signal),其会唤醒在该条件变量上处于睡眠状态的一个进程;
(3)广播(broadcast),它会唤醒在该条件变量上睡眠的所有进程。

在我们的实现中,条件变量使进程进入可中断睡眠状态(所以在条件满足之前能够被取消),并且内部不使用指针(因而在分布式共享内存(DSM)中使用是安全的)。

源码实现相关文件:

  • condition_variable.h
  • condition_variable.c

相关文章:

  • HDLBits ——> Building Larger Circuits
  • Windows桌面系统管理5:Windows 10操作系统注册表
  • ubuntu源码方式安装TensorRT-LLM推理框架(超详细)
  • 亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!
  • idea连接gitee(使用idea远程兼容gitee)
  • Redis7——基础篇(五)
  • Docker 部署 ollama + DeepSeek
  • buildctl配置镜像加速
  • ES6中Object.defineProperty 的详细用法和使用场景以及例子
  • 在 C++23 中使用智能指针进行现代内存管理 – 第 1 部分
  • MyBatisPlus学习
  • 【llm post-training】从Loss Function设计上看LLM SFT和RL的区别和联系
  • 【练习】【二分】力扣热题100 35. 搜索插入位置]
  • Markdown 常用语法及示例
  • CSS中块级格式化上下文(BFC)详解
  • 【c语言初阶】函数递归
  • 玩机日记 12 在PVE Windows11上部署本地AI模型,使用群晖反代https转发到外网提供服务,配合沉浸式翻译插件翻译网页
  • 复现论文:DPStyler: Dynamic PromptStyler for Source-Free Domain Generalization
  • 蓝桥杯 Java B 组 之堆的基础(优先队列实现 Top K 问题)
  • 链表_反转链表
  • 佩斯科夫:若普京认为必要,将公布土耳其谈判俄方代表人选
  • 著名连环画家庞邦本逝世
  • 通辽警方侦破一起积压21年的命案:嫌疑人企图强奸遭反抗后杀人
  • 秦洪看盘|预期改善,或迎来新的增量资金
  • 欧阳娜娜携家人回江西探亲,受聘为江西吉安文化旅游大使
  • 菲律宾举行中期选举