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

结构体

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

宏定义

#define XWOS_SQLK_INITIALIZER   { .ossql = XWOSDL_SQLK_INITIALIZER, }
 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.h124 行定义.

◆ XWOS_SQLK_INITIALIZER

#define XWOS_SQLK_INITIALIZER   { .ossql = XWOSDL_SQLK_INITIALIZER, }

XWOS API:顺序锁的初始值

在文件 seqlock.h119 行定义.

函数说明

◆ xwos_sqlk_get_seq()

static xwsq_t xwos_sqlk_get_seq ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h175 行定义.

176{
177 return xwosdl_sqlk_get_seq(&sql->ossql);
178}
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.h133 行定义.

134{
135 xwosdl_sqlk_init(&sql->ossql);
136}
这是这个函数的调用关系图:

◆ xwos_sqlk_rd_begin()

static xwsq_t xwos_sqlk_rd_begin ( struct xwos_sqlk sql)
inlinestatic

XWOS API:开启共享读临界区

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

在文件 seqlock.h148 行定义.

149{
150 return xwosdl_sqlk_rd_begin(&sql->ossql);
151}
这是这个函数的调用关系图:

◆ 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.h163 行定义.

164{
165 return xwosdl_sqlk_rd_retry(&sql->ossql, start);
166}
这是这个函数的调用关系图:

◆ xwos_sqlk_rdex_lock()

static void xwos_sqlk_rdex_lock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:开启独占读临界区

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

在文件 seqlock.h189 行定义.

190{
191 xwosdl_sqlk_rdex_lock(&sql->ossql);
192}
这是这个函数的调用关系图:

◆ xwos_sqlk_rdex_lock_bh()

static void xwos_sqlk_rdex_lock_bh ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h447 行定义.

448{
449 xwosdl_sqlk_rdex_lock_bh(&sql->ossql);
450}
这是这个函数的调用关系图:

◆ xwos_sqlk_rdex_lock_cpuirq()

static void xwos_sqlk_rdex_lock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h233 行定义.

234{
235 xwosdl_sqlk_rdex_lock_cpuirq(&sql->ossql);
236}

◆ 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.h278 行定义.

280{
281 xwosdl_sqlk_rdex_lock_cpuirqsv(&sql->ossql, cpuirq);
282}
这是这个函数的调用关系图:

◆ 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.h330 行定义.

333{
334 xwosdl_sqlk_rdex_lock_irqs(&sql->ossql, irqs, num);
335}

◆ 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.h389 行定义.

392{
393 xwosdl_sqlk_rdex_lock_irqssv(&sql->ossql, irqs, flags, num);
394}
这是这个函数的调用关系图:

◆ xwos_sqlk_rdex_trylock()

static xwer_t xwos_sqlk_rdex_trylock ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h206 行定义.

207{
208 return xwosdl_sqlk_rdex_trylock(&sql->ossql);
209}
这是这个函数的调用关系图:

◆ 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.h465 行定义.

466{
467 return xwosdl_sqlk_rdex_trylock_bh(&sql->ossql);
468}
这是这个函数的调用关系图:

◆ 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.h250 行定义.

251{
252 return xwosdl_sqlk_rdex_trylock_cpuirq(&sql->ossql);
253}

◆ 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.h297 行定义.

299{
300 return xwosdl_sqlk_rdex_trylock_cpuirqsv(&sql->ossql, cpuirq);
301}
这是这个函数的调用关系图:

◆ 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.h352 行定义.

355{
356 return xwosdl_sqlk_rdex_trylock_irqs(&sql->ossql, irqs, num);
357}

◆ 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.h412 行定义.

415{
416 return xwosdl_sqlk_rdex_trylock_irqssv(&sql->ossql, irqs, flags, num);
417}
这是这个函数的调用关系图:

◆ xwos_sqlk_rdex_unlock()

static void xwos_sqlk_rdex_unlock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:关闭独占读临界区

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

在文件 seqlock.h218 行定义.

219{
220 xwosdl_sqlk_rdex_unlock(&sql->ossql);
221}
这是这个函数的调用关系图:

◆ xwos_sqlk_rdex_unlock_bh()

static void xwos_sqlk_rdex_unlock_bh ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h477 行定义.

478{
479 xwosdl_sqlk_rdex_unlock_bh(&sql->ossql);
480}
这是这个函数的调用关系图:

◆ xwos_sqlk_rdex_unlock_cpuirq()

static void xwos_sqlk_rdex_unlock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h262 行定义.

263{
264 xwosdl_sqlk_rdex_unlock_cpuirq(&sql->ossql);
265}

◆ 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.h311 行定义.

313{
314 xwosdl_sqlk_rdex_unlock_cpuirqrs(&sql->ossql, cpuirq);
315}
这是这个函数的调用关系图:

◆ 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.h368 行定义.

371{
372 xwosdl_sqlk_rdex_unlock_irqs(&sql->ossql, irqs, num);
373}

◆ 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.h429 行定义.

432{
433 xwosdl_sqlk_rdex_unlock_irqsrs(&sql->ossql, irqs, flags, num);
434}
这是这个函数的调用关系图:

◆ xwos_sqlk_wr_lock()

static void xwos_sqlk_wr_lock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:开启写临界区

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

在文件 seqlock.h491 行定义.

492{
493 xwosdl_sqlk_wr_lock(&sql->ossql);
494}
这是这个函数的调用关系图:

◆ xwos_sqlk_wr_lock_bh()

static void xwos_sqlk_wr_lock_bh ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h750 行定义.

751{
752 xwosdl_sqlk_wr_lock_bh(&sql->ossql);
753}
这是这个函数的调用关系图:

◆ xwos_sqlk_wr_lock_cpuirq()

static void xwos_sqlk_wr_lock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h535 行定义.

536{
537 xwosdl_sqlk_wr_lock_cpuirq(&sql->ossql);
538}

◆ 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.h580 行定义.

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

◆ 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.h632 行定义.

635{
636 xwosdl_sqlk_wr_lock_irqs(&sql->ossql, irqs, num);
637}

◆ 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.h692 行定义.

695{
696 xwosdl_sqlk_wr_lock_irqssv(&sql->ossql, irqs, flags, num);
697}
这是这个函数的调用关系图:

◆ xwos_sqlk_wr_trylock()

static xwer_t xwos_sqlk_wr_trylock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:尝试开启写临界区

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

在文件 seqlock.h506 行定义.

507{
508 return xwosdl_sqlk_wr_trylock(&sql->ossql);
509}
这是这个函数的调用关系图:

◆ 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.h768 行定义.

769{
770 return xwosdl_sqlk_wr_trylock_bh(&sql->ossql);
771}
这是这个函数的调用关系图:

◆ 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.h552 行定义.

553{
554 return xwosdl_sqlk_wr_trylock_cpuirq(&sql->ossql);
555}

◆ 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.h599 行定义.

601{
602 return xwosdl_sqlk_wr_trylock_cpuirqsv(&sql->ossql, cpuirq);
603}
这是这个函数的调用关系图:

◆ 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.h654 行定义.

657{
658 return xwosdl_sqlk_wr_trylock_irqs(&sql->ossql, irqs, num);
659}

◆ 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.h715 行定义.

718{
719 return xwosdl_sqlk_wr_trylock_irqssv(&sql->ossql, irqs, flags, num);
720}
这是这个函数的调用关系图:

◆ xwos_sqlk_wr_unlock()

static void xwos_sqlk_wr_unlock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:关闭写临界区

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

在文件 seqlock.h520 行定义.

521{
522 xwosdl_sqlk_wr_unlock(&sql->ossql);
523}
这是这个函数的调用关系图:

◆ xwos_sqlk_wr_unlock_bh()

static void xwos_sqlk_wr_unlock_bh ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h782 行定义.

783{
784 xwosdl_sqlk_wr_unlock_bh(&sql->ossql);
785}
这是这个函数的调用关系图:

◆ xwos_sqlk_wr_unlock_cpuirq()

static void xwos_sqlk_wr_unlock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h564 行定义.

565{
566 xwosdl_sqlk_wr_unlock_cpuirq(&sql->ossql);
567}

◆ 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.h613 行定义.

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

◆ 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.h670 行定义.

673{
674 xwosdl_sqlk_wr_unlock_irqs(&sql->ossql, irqs, num);
675}

◆ 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.h732 行定义.

735{
736 xwosdl_sqlk_wr_unlock_irqsrs(&sql->ossql, irqs, flags, num);
737}
这是这个函数的调用关系图: