XWOS API  3.0
XWOS API参考手册
载入中...
搜索中...
未找到
顺序锁 的协作图:

结构体

struct  xwos_sqlk
 XWOS API:顺序锁 更多...
 

宏定义

#define XWOS_SQLK_GRANULARITY   XWOSDL_SQLK_GRANULARITY
 操作系统抽象层:顺序锁顺序值的粒度
 

函数

static void xwos_sqlk_init (struct xwos_sqlk *sql)
 XWOS API:初始化顺序锁
 
static xwsq_t xwos_sqlk_rd_begin (struct xwos_sqlk *sql)
 XWOS API:开启共享读临界区
 
static bool xwos_sqlk_rd_retry (struct xwos_sqlk *sql, xwsq_t start)
 XWOS API:关闭共享读临界区,并检查是否需要重试
 
static xwsq_t xwos_sqlk_get_seq (struct xwos_sqlk *sql)
 XWOS API:获取顺序锁的顺序值
 
static void xwos_sqlk_rdex_lock (struct xwos_sqlk *sql)
 XWOS API:开启独占读临界区
 
static xwer_t xwos_sqlk_rdex_trylock (struct xwos_sqlk *sql)
 XWOS API:尝试开启独占读临界区
 
static void xwos_sqlk_rdex_unlock (struct xwos_sqlk *sql)
 XWOS API:关闭独占读临界区
 
static void xwos_sqlk_rdex_lock_cpuirq (struct xwos_sqlk *sql)
 XWOS API:开启独占读临界区,并关闭本地CPU的中断
 
static xwer_t xwos_sqlk_rdex_trylock_cpuirq (struct xwos_sqlk *sql)
 XWOS API:尝试开启独占读临界区,并关闭本地CPU的中断
 
static void xwos_sqlk_rdex_unlock_cpuirq (struct xwos_sqlk *sql)
 XWOS API:关闭独占读临界区,并开启本地CPU的中断
 
static void xwos_sqlk_rdex_lock_cpuirqsv (struct xwos_sqlk *sql, xwreg_t *cpuirq)
 XWOS API:开启独占读临界区,保存本地CPU的中断标志并关闭
 
static xwer_t xwos_sqlk_rdex_trylock_cpuirqsv (struct xwos_sqlk *sql, xwreg_t *cpuirq)
 XWOS API:尝试开启独占读临界区,保存本地CPU的中断标志并关闭
 
static void xwos_sqlk_rdex_unlock_cpuirqrs (struct xwos_sqlk *sql, xwreg_t cpuirq)
 XWOS API:关闭独占读临界区,恢复本地CPU的中断标志
 
static void xwos_sqlk_rdex_lock_irqs (struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
 XWOS API:开启独占读临界区,并关闭部分中断
 
static xwer_t xwos_sqlk_rdex_trylock_irqs (struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
 XWOS API:尝试开启独占读临界区,并关闭部分中断
 
static void xwos_sqlk_rdex_unlock_irqs (struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
 XWOS API:关闭独占读临界区,并开启部分中断
 
static void xwos_sqlk_rdex_lock_irqssv (struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
 XWOS API:开启独占读临界区,保存部分中断的中断标志并关闭
 
static xwer_t xwos_sqlk_rdex_trylock_irqssv (struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
 XWOS API:尝试开启独占读临界区,保存部分中断的中断标志并关闭
 
static void xwos_sqlk_rdex_unlock_irqsrs (struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
 XWOS API:关闭独占读临界区,恢复部分中断的中断标志
 
static void xwos_sqlk_rdex_lock_bh (struct xwos_sqlk *sql)
 XWOS API:开启独占读临界区,关闭本地CPU的中断底半部
 
static xwer_t xwos_sqlk_rdex_trylock_bh (struct xwos_sqlk *sql)
 XWOS API:尝试开启独占读临界区,关闭本地CPU的中断底半部
 
static void xwos_sqlk_rdex_unlock_bh (struct xwos_sqlk *sql)
 XWOS API:关闭独占读临界区,开启本地CPU的中断底半部
 
static void xwos_sqlk_wr_lock (struct xwos_sqlk *sql)
 XWOS API:开启写临界区
 
static xwer_t xwos_sqlk_wr_trylock (struct xwos_sqlk *sql)
 XWOS API:尝试开启写临界区
 
static void xwos_sqlk_wr_unlock (struct xwos_sqlk *sql)
 XWOS API:关闭写临界区
 
static void xwos_sqlk_wr_lock_cpuirq (struct xwos_sqlk *sql)
 XWOS API:开启写临界区,并关闭本地CPU的中断
 
static xwer_t xwos_sqlk_wr_trylock_cpuirq (struct xwos_sqlk *sql)
 XWOS API:尝试开启写临界区,并关闭本地CPU的中断
 
static void xwos_sqlk_wr_unlock_cpuirq (struct xwos_sqlk *sql)
 XWOS API:关闭写临界区,并开启本地CPU的中断
 
static void xwos_sqlk_wr_lock_cpuirqsv (struct xwos_sqlk *sql, xwreg_t *cpuirq)
 XWOS API:开启写临界区,保存本地CPU的中断标志并关闭
 
static xwer_t xwos_sqlk_wr_trylock_cpuirqsv (struct xwos_sqlk *sql, xwreg_t *cpuirq)
 XWOS API:尝试开启写临界区,保存本地CPU的中断标志并关闭
 
static void xwos_sqlk_wr_unlock_cpuirqrs (struct xwos_sqlk *sql, xwreg_t cpuirq)
 XWOS API:关闭写临界区,恢复本地CPU的中断标志
 
static void xwos_sqlk_wr_lock_irqs (struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
 XWOS API:开启写临界区,并关闭部分中断
 
static xwer_t xwos_sqlk_wr_trylock_irqs (struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
 XWOS API:尝试开启写临界区,并关闭部分中断
 
static void xwos_sqlk_wr_unlock_irqs (struct xwos_sqlk *sql, const xwirq_t irqs[], xwsz_t num)
 XWOS API:关闭写临界区,并开启部分中断
 
static void xwos_sqlk_wr_lock_irqssv (struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
 XWOS API:开启写临界区,保存部分中断的中断标志并关闭
 
static xwer_t xwos_sqlk_wr_trylock_irqssv (struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
 XWOS API:尝试开启写临界区,保存部分中断的中断标志并关闭
 
static void xwos_sqlk_wr_unlock_irqsrs (struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
 XWOS API:关闭写临界区,恢复部分中断的中断标志
 
static void xwos_sqlk_wr_lock_bh (struct xwos_sqlk *sql)
 XWOS API:开启写临界区,关闭本地CPU的中断底半部
 
static xwer_t xwos_sqlk_wr_trylock_bh (struct xwos_sqlk *sql)
 XWOS API:尝试开启写临界区,关闭本地CPU的中断底半部
 
static void xwos_sqlk_wr_unlock_bh (struct xwos_sqlk *sql)
 XWOS API:关闭写临界区,开启本地CPU的中断底半部
 

详细描述

技术参考手册: 顺序锁

顺序锁的初始化

非独占读

独占读

C++

C++头文件: xwos/osal/lock/seqlock.hxx

宏定义说明

◆ XWOS_SQLK_GRANULARITY

#define XWOS_SQLK_GRANULARITY   XWOSDL_SQLK_GRANULARITY

操作系统抽象层:顺序锁顺序值的粒度

在文件 seqlock.h119 行定义.

函数说明

◆ xwos_sqlk_get_seq()

static xwsq_t xwos_sqlk_get_seq ( struct xwos_sqlk sql)
inlinestatic

XWOS API:获取顺序锁的顺序值

参数
[in]sql顺序锁的指针
注解
  • 上下文:任意

在文件 seqlock.h170 行定义.

171{
172 return xwosdl_sqlk_get_seq(&sql->ossql);
173}
xwosdl_sqlk_t ossql
Definition seqlock.h:113

◆ xwos_sqlk_init()

static void xwos_sqlk_init ( struct xwos_sqlk sql)
inlinestatic

XWOS API:初始化顺序锁

参数
[in]sql顺序锁的指针
注解
  • 上下文:任意

在文件 seqlock.h128 行定义.

129{
130 xwosdl_sqlk_init(&sql->ossql);
131}
这是这个函数的调用关系图:

◆ xwos_sqlk_rd_begin()

static xwsq_t xwos_sqlk_rd_begin ( struct xwos_sqlk sql)
inlinestatic

XWOS API:开启共享读临界区

参数
[in]sql顺序锁的指针
返回
当前顺序值
注解
  • 上下文:任意
  • 若顺序锁已处于写临界区,就自旋等待。

在文件 seqlock.h143 行定义.

144{
145 return xwosdl_sqlk_rd_begin(&sql->ossql);
146}

◆ xwos_sqlk_rd_retry()

static bool xwos_sqlk_rd_retry ( struct xwos_sqlk sql,
xwsq_t  start 
)
inlinestatic

XWOS API:关闭共享读临界区,并检查是否需要重试

参数
[in]sql顺序锁的指针
[in]startxwos_sqlk_rd_begin() 返回的顺序值,用于测试顺序值是否发生改变
返回值
true顺序值发生了改变,需要重试
false顺序值未发生改变
注解
  • 上下文:任意

在文件 seqlock.h158 行定义.

159{
160 return xwosdl_sqlk_rd_retry(&sql->ossql, start);
161}

◆ xwos_sqlk_rdex_lock()

static void xwos_sqlk_rdex_lock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:开启独占读临界区

参数
[in]sql顺序锁的指针
注解
  • 上下文:线程
  • 此函数只会关闭本地CPU的抢占,因此只能保证其临界区在线程中是安全的。

在文件 seqlock.h184 行定义.

185{
186 xwosdl_sqlk_rdex_lock(&sql->ossql);
187}

◆ xwos_sqlk_rdex_lock_bh()

static void xwos_sqlk_rdex_lock_bh ( struct xwos_sqlk sql)
inlinestatic

XWOS API:开启独占读临界区,关闭本地CPU的中断底半部

参数
[in]sql顺序锁的指针
注解
  • 上下文:线程、中断底半部
  • 若顺序锁已处于写或独占读临界区,就自旋等待。
  • 此函数只会关闭本地CPU的抢占和中断底半部, 因此只能保证其临界区在线程与中断底半部中是安全的。

在文件 seqlock.h442 行定义.

443{
444 xwosdl_sqlk_rdex_lock_bh(&sql->ossql);
445}

◆ xwos_sqlk_rdex_lock_cpuirq()

static void xwos_sqlk_rdex_lock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

XWOS API:开启独占读临界区,并关闭本地CPU的中断

参数
[in]sql顺序锁的指针
注解
  • 上下文:任意
  • 若顺序锁已处于写或独占读临界区,就自旋等待。
  • 此函数会关闭本地CPU的抢占与中断,因此可保证其临界区在所有上下文都是安全的。

在文件 seqlock.h228 行定义.

229{
230 xwosdl_sqlk_rdex_lock_cpuirq(&sql->ossql);
231}

◆ xwos_sqlk_rdex_lock_cpuirqsv()

static void xwos_sqlk_rdex_lock_cpuirqsv ( struct xwos_sqlk sql,
xwreg_t cpuirq 
)
inlinestatic

XWOS API:开启独占读临界区,保存本地CPU的中断标志并关闭

参数
[in]sql顺序锁的指针
[out]cpuirq缓冲区指针,用于返回本地CPU的中断标志
注解
  • 上下文:任意
  • 若顺序锁已处于写或独占读临界区,就自旋等待。
  • 此函数会关闭本地CPU的抢占与中断,因此可保证其临界区在所有上下文都是安全的。

在文件 seqlock.h273 行定义.

275{
276 xwosdl_sqlk_rdex_lock_cpuirqsv(&sql->ossql, cpuirq);
277}

◆ xwos_sqlk_rdex_lock_irqs()

static void xwos_sqlk_rdex_lock_irqs ( struct xwos_sqlk sql,
const xwirq_t  irqs[],
xwsz_t  num 
)
inlinestatic

XWOS API:开启独占读临界区,并关闭部分中断

参数
[in]sql顺序锁的指针
[in]irqs中断资源数组指针
[in]num数组中元素数量
注解
  • 上下文:线程、中断资源数组中描述的中断
  • 若顺序锁已处于写或独占读临界区,就自旋等待。
  • 此函数只会关闭本地CPU的抢占和部分中断, 因此只能保证其临界区在这些中断与线程上下文是安全的。

在文件 seqlock.h325 行定义.

328{
329 xwosdl_sqlk_rdex_lock_irqs(&sql->ossql, irqs, num);
330}

◆ xwos_sqlk_rdex_lock_irqssv()

static void xwos_sqlk_rdex_lock_irqssv ( struct xwos_sqlk sql,
const xwirq_t  irqs[],
xwreg_t  flags[],
xwsz_t  num 
)
inlinestatic

XWOS API:开启独占读临界区,保存部分中断的中断标志并关闭

参数
[in]sql顺序锁的指针
[in]irqs中断资源数组指针
[out]flags缓冲区指针,用于返回部分中断的中断标志
[in]num数组中元素数量
注解
  • 上下文:线程、中断资源数组中描述的中断
  • 若顺序锁已处于写或独占读临界区,就自旋等待。
  • 此函数只会关闭本地CPU的抢占和部分中断, 因此只能保证其临界区在这些中断与线程上下文是安全的。

在文件 seqlock.h384 行定义.

387{
388 xwosdl_sqlk_rdex_lock_irqssv(&sql->ossql, irqs, flags, num);
389}

◆ xwos_sqlk_rdex_trylock()

static xwer_t xwos_sqlk_rdex_trylock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:尝试开启独占读临界区

参数
[in]sql顺序锁的指针
返回
错误码
返回值
XWOK没有错误
-EAGAIN获得锁失败
注解
  • 上下文:线程
  • 此函数只会关闭本地CPU的抢占,因此只能保证其临界区在线程中是安全的。

在文件 seqlock.h201 行定义.

202{
203 return xwosdl_sqlk_rdex_trylock(&sql->ossql);
204}

◆ xwos_sqlk_rdex_trylock_bh()

static xwer_t xwos_sqlk_rdex_trylock_bh ( struct xwos_sqlk sql)
inlinestatic

XWOS API:尝试开启独占读临界区,关闭本地CPU的中断底半部

参数
[in]sql顺序锁的指针
返回
错误码
返回值
XWOK没有错误
-EAGAIN获得锁失败
注解
  • 上下文:线程、中断底半部
  • 此函数只会关闭本地CPU的抢占和中断底半部, 因此只能保证其临界区在线程与中断底半部中是安全的。

在文件 seqlock.h460 行定义.

461{
462 return xwosdl_sqlk_rdex_trylock_bh(&sql->ossql);
463}

◆ xwos_sqlk_rdex_trylock_cpuirq()

static xwer_t xwos_sqlk_rdex_trylock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

XWOS API:尝试开启独占读临界区,并关闭本地CPU的中断

参数
[in]sql顺序锁的指针
返回
错误码
返回值
XWOK没有错误
-EAGAIN获得锁失败
注解
  • 上下文:任意
  • 此函数会关闭本地CPU的抢占与中断,因此可保证其临界区在所有上下文都是安全的。

在文件 seqlock.h245 行定义.

246{
247 return xwosdl_sqlk_rdex_trylock_cpuirq(&sql->ossql);
248}

◆ xwos_sqlk_rdex_trylock_cpuirqsv()

static xwer_t xwos_sqlk_rdex_trylock_cpuirqsv ( struct xwos_sqlk sql,
xwreg_t cpuirq 
)
inlinestatic

XWOS API:尝试开启独占读临界区,保存本地CPU的中断标志并关闭

参数
[in]sql顺序锁的指针
[out]cpuirq缓冲区指针,用于返回本地CPU的中断标志
返回
错误码
返回值
XWOK没有错误
-EAGAIN获得锁失败
注解
  • 上下文:任意
  • 此函数会关闭本地CPU的抢占与中断,因此可保证其临界区在所有上下文都是安全的。

在文件 seqlock.h292 行定义.

294{
295 return xwosdl_sqlk_rdex_trylock_cpuirqsv(&sql->ossql, cpuirq);
296}

◆ xwos_sqlk_rdex_trylock_irqs()

static xwer_t xwos_sqlk_rdex_trylock_irqs ( struct xwos_sqlk sql,
const xwirq_t  irqs[],
xwsz_t  num 
)
inlinestatic

XWOS API:尝试开启独占读临界区,并关闭部分中断

参数
[in]sql顺序锁的指针
[in]irqs中断资源数组指针
[in]num数组中元素数量
返回
错误码
返回值
XWOK没有错误
-EAGAIN获得锁失败
注解
  • 上下文:线程、中断资源数组中描述的中断
  • 此函数只会关闭本地CPU的抢占和部分中断, 因此只能保证其临界区在这些中断与线程上下文是安全的。

在文件 seqlock.h347 行定义.

350{
351 return xwosdl_sqlk_rdex_trylock_irqs(&sql->ossql, irqs, num);
352}

◆ xwos_sqlk_rdex_trylock_irqssv()

static xwer_t xwos_sqlk_rdex_trylock_irqssv ( struct xwos_sqlk sql,
const xwirq_t  irqs[],
xwreg_t  flags[],
xwsz_t  num 
)
inlinestatic

XWOS API:尝试开启独占读临界区,保存部分中断的中断标志并关闭

参数
[in]sql顺序锁的指针
[in]irqs中断资源数组指针
[out]flags缓冲区指针,用于返回部分中断的中断标志
[in]num数组中元素数量
返回
错误码
返回值
XWOK没有错误
-EAGAIN获得锁失败
注解
  • 上下文:线程、中断资源数组中描述的中断
  • 此函数只会关闭本地CPU的抢占和部分中断, 因此只能保证其临界区在这些中断与线程上下文是安全的。

在文件 seqlock.h407 行定义.

410{
411 return xwosdl_sqlk_rdex_trylock_irqssv(&sql->ossql, irqs, flags, num);
412}

◆ xwos_sqlk_rdex_unlock()

static void xwos_sqlk_rdex_unlock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:关闭独占读临界区

参数
[in]sql顺序锁的指针
注解
  • 上下文:线程

在文件 seqlock.h213 行定义.

214{
215 xwosdl_sqlk_rdex_unlock(&sql->ossql);
216}

◆ xwos_sqlk_rdex_unlock_bh()

static void xwos_sqlk_rdex_unlock_bh ( struct xwos_sqlk sql)
inlinestatic

XWOS API:关闭独占读临界区,开启本地CPU的中断底半部

参数
[in]sql顺序锁的指针
注解
  • 上下文:线程、中断底半部

在文件 seqlock.h472 行定义.

473{
474 xwosdl_sqlk_rdex_unlock_bh(&sql->ossql);
475}

◆ xwos_sqlk_rdex_unlock_cpuirq()

static void xwos_sqlk_rdex_unlock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

XWOS API:关闭独占读临界区,并开启本地CPU的中断

参数
[in]sql顺序锁的指针
注解
  • 上下文:任意

在文件 seqlock.h257 行定义.

258{
259 xwosdl_sqlk_rdex_unlock_cpuirq(&sql->ossql);
260}

◆ xwos_sqlk_rdex_unlock_cpuirqrs()

static void xwos_sqlk_rdex_unlock_cpuirqrs ( struct xwos_sqlk sql,
xwreg_t  cpuirq 
)
inlinestatic

XWOS API:关闭独占读临界区,恢复本地CPU的中断标志

参数
[in]sql顺序锁的指针
[in]cpuirq本地CPU的中断标志
注解
  • 上下文:任意

在文件 seqlock.h306 行定义.

308{
309 xwosdl_sqlk_rdex_unlock_cpuirqrs(&sql->ossql, cpuirq);
310}

◆ xwos_sqlk_rdex_unlock_irqs()

static void xwos_sqlk_rdex_unlock_irqs ( struct xwos_sqlk sql,
const xwirq_t  irqs[],
xwsz_t  num 
)
inlinestatic

XWOS API:关闭独占读临界区,并开启部分中断

参数
[in]sql顺序锁的指针
[in]irqs中断资源数组指针
[in]num数组中元素数量
注解
  • 上下文:线程、中断资源数组中描述的中断

在文件 seqlock.h363 行定义.

366{
367 xwosdl_sqlk_rdex_unlock_irqs(&sql->ossql, irqs, num);
368}

◆ xwos_sqlk_rdex_unlock_irqsrs()

static void xwos_sqlk_rdex_unlock_irqsrs ( struct xwos_sqlk sql,
const xwirq_t  irqs[],
xwreg_t  flags[],
xwsz_t  num 
)
inlinestatic

XWOS API:关闭独占读临界区,恢复部分中断的中断标志

参数
[in]sql顺序锁的指针
[in]irqs中断资源数组指针
[in]flags部分中断的中断标志数组
[in]num数组中元素数量
注解
  • 上下文:线程、中断资源数组中描述的中断

在文件 seqlock.h424 行定义.

427{
428 xwosdl_sqlk_rdex_unlock_irqsrs(&sql->ossql, irqs, flags, num);
429}

◆ xwos_sqlk_wr_lock()

static void xwos_sqlk_wr_lock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:开启写临界区

参数
[in]sql顺序锁的指针
注解
  • 上下文:线程
  • 若顺序锁已处于写或独占读临界区,就自旋等待。

在文件 seqlock.h486 行定义.

487{
488 xwosdl_sqlk_wr_lock(&sql->ossql);
489}

◆ xwos_sqlk_wr_lock_bh()

static void xwos_sqlk_wr_lock_bh ( struct xwos_sqlk sql)
inlinestatic

XWOS API:开启写临界区,关闭本地CPU的中断底半部

参数
[in]sql顺序锁的指针
注解
  • 上下文:线程、中断底半部
  • 若顺序锁已处于写或独占读临界区,就自旋等待。
  • 此函数只会关闭本地CPU的抢占和中断底半部, 因此只能保证其临界区在线程与中断底半部中是安全的。

在文件 seqlock.h745 行定义.

746{
747 xwosdl_sqlk_wr_lock_bh(&sql->ossql);
748}

◆ xwos_sqlk_wr_lock_cpuirq()

static void xwos_sqlk_wr_lock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

XWOS API:开启写临界区,并关闭本地CPU的中断

参数
[in]sql顺序锁的指针
注解
  • 上下文:线程
  • 若顺序锁已处于写或独占读临界区,就自旋等待。
  • 此函数会关闭本地CPU的抢占与中断,因此可保证其临界区在所有上下文都是安全的。

在文件 seqlock.h530 行定义.

531{
532 xwosdl_sqlk_wr_lock_cpuirq(&sql->ossql);
533}

◆ xwos_sqlk_wr_lock_cpuirqsv()

static void xwos_sqlk_wr_lock_cpuirqsv ( struct xwos_sqlk sql,
xwreg_t cpuirq 
)
inlinestatic

XWOS API:开启写临界区,保存本地CPU的中断标志并关闭

参数
[in]sql顺序锁的指针
[out]cpuirq缓冲区指针,用于返回本地CPU的中断标志
注解
  • 上下文:任意
  • 若顺序锁已处于写或独占读临界区,就自旋等待。
  • 此函数会关闭本地CPU的抢占与中断,因此可保证其临界区在所有上下文都是安全的。

在文件 seqlock.h575 行定义.

577{
578 xwosdl_sqlk_wr_lock_cpuirqsv(&sql->ossql, cpuirq);
579}
这是这个函数的调用关系图:

◆ xwos_sqlk_wr_lock_irqs()

static void xwos_sqlk_wr_lock_irqs ( struct xwos_sqlk sql,
const xwirq_t  irqs[],
xwsz_t  num 
)
inlinestatic

XWOS API:开启写临界区,并关闭部分中断

参数
[in]sql顺序锁的指针
[in]irqs中断资源数组指针
[in]num数组中元素数量
注解
  • 上下文:线程、中断资源数组中描述的中断
  • 若顺序锁已处于写或独占读临界区,就自旋等待。
  • 此函数只会关闭本地CPU的抢占和部分中断, 因此只能保证其临界区在这些中断与线程上下文中是安全的。

在文件 seqlock.h627 行定义.

630{
631 xwosdl_sqlk_wr_lock_irqs(&sql->ossql, irqs, num);
632}

◆ xwos_sqlk_wr_lock_irqssv()

static void xwos_sqlk_wr_lock_irqssv ( struct xwos_sqlk sql,
const xwirq_t  irqs[],
xwreg_t  flags[],
xwsz_t  num 
)
inlinestatic

XWOS API:开启写临界区,保存部分中断的中断标志并关闭

参数
[in]sql顺序锁的指针
[in]irqs中断资源数组指针
[out]flags缓冲区指针,用于返回部分中断的中断标志
[in]num数组中元素数量
注解
  • 上下文:线程、中断资源数组中描述的中断
  • 若顺序锁已处于写或独占读临界区,就自旋等待。
  • 此函数只会关闭本地CPU的抢占和部分中断, 因此只能保证其临界区在这些中断与线程上下文是安全的。

在文件 seqlock.h687 行定义.

690{
691 xwosdl_sqlk_wr_lock_irqssv(&sql->ossql, irqs, flags, num);
692}

◆ xwos_sqlk_wr_trylock()

static xwer_t xwos_sqlk_wr_trylock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:尝试开启写临界区

参数
[in]sql顺序锁的指针
返回
错误码
返回值
XWOK没有错误
-EAGAIN获得锁失败
注解
  • 上下文:线程

在文件 seqlock.h501 行定义.

502{
503 return xwosdl_sqlk_wr_trylock(&sql->ossql);
504}

◆ xwos_sqlk_wr_trylock_bh()

static xwer_t xwos_sqlk_wr_trylock_bh ( struct xwos_sqlk sql)
inlinestatic

XWOS API:尝试开启写临界区,关闭本地CPU的中断底半部

参数
[in]sql顺序锁的指针
返回
错误码
返回值
XWOK没有错误
-EAGAIN获得锁失败
注解
  • 上下文:线程、中断底半部
  • 此函数只会关闭本地CPU的抢占和中断底半部, 因此只能保证其临界区在线程与中断底半部中是安全的。

在文件 seqlock.h763 行定义.

764{
765 return xwosdl_sqlk_wr_trylock_bh(&sql->ossql);
766}

◆ xwos_sqlk_wr_trylock_cpuirq()

static xwer_t xwos_sqlk_wr_trylock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

XWOS API:尝试开启写临界区,并关闭本地CPU的中断

参数
[in]sql顺序锁的指针
返回
错误码
返回值
XWOK没有错误
-EAGAIN获得锁失败
注解
  • 上下文:任意
  • 此函数会关闭本地CPU的抢占与中断,因此可保证其临界区在所有上下文都是安全的。

在文件 seqlock.h547 行定义.

548{
549 return xwosdl_sqlk_wr_trylock_cpuirq(&sql->ossql);
550}

◆ xwos_sqlk_wr_trylock_cpuirqsv()

static xwer_t xwos_sqlk_wr_trylock_cpuirqsv ( struct xwos_sqlk sql,
xwreg_t cpuirq 
)
inlinestatic

XWOS API:尝试开启写临界区,保存本地CPU的中断标志并关闭

参数
[in]sql顺序锁的指针
[out]cpuirq缓冲区指针,用于返回本地CPU的中断标志
返回
错误码
返回值
XWOK没有错误
-EAGAIN获得锁失败
注解
  • 上下文:任意
  • 此函数会关闭本地CPU的抢占与中断,因此可保证其临界区在所有上下文都是安全的。

在文件 seqlock.h594 行定义.

596{
597 return xwosdl_sqlk_wr_trylock_cpuirqsv(&sql->ossql, cpuirq);
598}

◆ xwos_sqlk_wr_trylock_irqs()

static xwer_t xwos_sqlk_wr_trylock_irqs ( struct xwos_sqlk sql,
const xwirq_t  irqs[],
xwsz_t  num 
)
inlinestatic

XWOS API:尝试开启写临界区,并关闭部分中断

参数
[in]sql顺序锁的指针
[in]irqs中断资源数组指针
[in]num数组中元素数量
返回
错误码
返回值
XWOK没有错误
-EAGAIN获得锁失败
注解
  • 上下文:线程、中断资源数组中描述的中断
  • 此函数只会关闭本地CPU的抢占和部分中断, 因此只能保证其临界区在这些中断与线程上下文是安全的。

在文件 seqlock.h649 行定义.

652{
653 return xwosdl_sqlk_wr_trylock_irqs(&sql->ossql, irqs, num);
654}

◆ xwos_sqlk_wr_trylock_irqssv()

static xwer_t xwos_sqlk_wr_trylock_irqssv ( struct xwos_sqlk sql,
const xwirq_t  irqs[],
xwreg_t  flags[],
xwsz_t  num 
)
inlinestatic

XWOS API:尝试开启写临界区,保存部分中断的中断标志并关闭

参数
[in]sql顺序锁的指针
[in]irqs中断资源数组指针
[out]flags缓冲区指针,用于返回部分中断的中断标志
[in]num数组中元素数量
返回
错误码
返回值
XWOK没有错误
-EAGAIN获得锁失败
注解
  • 上下文:线程、中断资源数组中描述的中断
  • 此函数只会关闭本地CPU的抢占和部分中断, 因此只能保证其临界区在这些中断与线程上下文是安全的。

在文件 seqlock.h710 行定义.

713{
714 return xwosdl_sqlk_wr_trylock_irqssv(&sql->ossql, irqs, flags, num);
715}

◆ xwos_sqlk_wr_unlock()

static void xwos_sqlk_wr_unlock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:关闭写临界区

参数
[in]sql顺序锁的指针
注解
  • 同步/异步:同步
  • 上下文:线程
  • 重入性:不可重入

在文件 seqlock.h515 行定义.

516{
517 xwosdl_sqlk_wr_unlock(&sql->ossql);
518}

◆ xwos_sqlk_wr_unlock_bh()

static void xwos_sqlk_wr_unlock_bh ( struct xwos_sqlk sql)
inlinestatic

XWOS API:关闭写临界区,开启本地CPU的中断底半部

参数
[in]sql顺序锁的指针
注解
  • 上下文:线程、中断底半部
  • 若顺序锁已处于写或独占读临界区,就自旋等待。

在文件 seqlock.h777 行定义.

778{
779 xwosdl_sqlk_wr_unlock_bh(&sql->ossql);
780}

◆ xwos_sqlk_wr_unlock_cpuirq()

static void xwos_sqlk_wr_unlock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

XWOS API:关闭写临界区,并开启本地CPU的中断

参数
[in]sql顺序锁的指针
注解
  • 上下文:任意

在文件 seqlock.h559 行定义.

560{
561 xwosdl_sqlk_wr_unlock_cpuirq(&sql->ossql);
562}

◆ xwos_sqlk_wr_unlock_cpuirqrs()

static void xwos_sqlk_wr_unlock_cpuirqrs ( struct xwos_sqlk sql,
xwreg_t  cpuirq 
)
inlinestatic

XWOS API:关闭写临界区,恢复本地CPU的中断标志

参数
[in]sql顺序锁的指针
[in]cpuirq本地CPU的中断标志
注解
  • 上下文:任意

在文件 seqlock.h608 行定义.

610{
611 xwosdl_sqlk_wr_unlock_cpuirqrs(&sql->ossql, cpuirq);
612}
这是这个函数的调用关系图:

◆ xwos_sqlk_wr_unlock_irqs()

static void xwos_sqlk_wr_unlock_irqs ( struct xwos_sqlk sql,
const xwirq_t  irqs[],
xwsz_t  num 
)
inlinestatic

XWOS API:关闭写临界区,并开启部分中断

参数
[in]sql顺序锁的指针
[in]irqs中断资源数组指针
[in]num数组中元素数量
注解
  • 上下文:线程、中断资源数组中描述的中断

在文件 seqlock.h665 行定义.

668{
669 xwosdl_sqlk_wr_unlock_irqs(&sql->ossql, irqs, num);
670}

◆ xwos_sqlk_wr_unlock_irqsrs()

static void xwos_sqlk_wr_unlock_irqsrs ( struct xwos_sqlk sql,
const xwirq_t  irqs[],
xwreg_t  flags[],
xwsz_t  num 
)
inlinestatic

XWOS API:关闭写临界区,恢复部分中断的中断标志

参数
[in]sql顺序锁的指针
[in]irqs中断资源数组指针
[in]flags部分中断的中断标志数组
[in]num数组中元素数量
注解
  • 上下文:线程、中断资源数组中描述的中断

在文件 seqlock.h727 行定义.

730{
731 xwosdl_sqlk_wr_unlock_irqsrs(&sql->ossql, irqs, flags, num);
732}