【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