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的中断底半部
 

详细描述

技术参考手册: 顺序锁

顺序锁的初始化

非独占读

独占读

宏定义说明

◆ XWOS_SQLK_INITIALIZER

#define XWOS_SQLK_INITIALIZER   { .ossql = XWOSDL_SQLK_INITIALIZER, }

XWOS API:顺序锁的初始值

在文件 seqlock.h116 行定义.

◆ XWOS_SQLK_GRANULARITY

#define XWOS_SQLK_GRANULARITY   XWOSDL_SQLK_GRANULARITY

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

在文件 seqlock.h121 行定义.

函数说明

◆ xwos_sqlk_init()

static void xwos_sqlk_init ( struct xwos_sqlk sql)
inlinestatic

XWOS API:初始化顺序锁

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

在文件 seqlock.h130 行定义.

131{
132 xwosdl_sqlk_init(&sql->ossql);
133}
xwosdl_sqlk_t ossql
Definition seqlock.h:110
这是这个函数的调用关系图:

◆ xwos_sqlk_rd_begin()

static xwsq_t xwos_sqlk_rd_begin ( struct xwos_sqlk sql)
inlinestatic

XWOS API:开启共享读临界区

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

在文件 seqlock.h145 行定义.

146{
147 return xwosdl_sqlk_rd_begin(&sql->ossql);
148}

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

161{
162 return xwosdl_sqlk_rd_retry(&sql->ossql, start);
163}

◆ xwos_sqlk_get_seq()

static xwsq_t xwos_sqlk_get_seq ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h172 行定义.

173{
174 return xwosdl_sqlk_get_seq(&sql->ossql);
175}

◆ xwos_sqlk_rdex_lock()

static void xwos_sqlk_rdex_lock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:开启独占读临界区

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

在文件 seqlock.h186 行定义.

187{
188 xwosdl_sqlk_rdex_lock(&sql->ossql);
189}
这是这个函数的调用关系图:

◆ xwos_sqlk_rdex_trylock()

static xwer_t xwos_sqlk_rdex_trylock ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h203 行定义.

204{
205 return xwosdl_sqlk_rdex_trylock(&sql->ossql);
206}

◆ xwos_sqlk_rdex_unlock()

static void xwos_sqlk_rdex_unlock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:关闭独占读临界区

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

在文件 seqlock.h215 行定义.

216{
217 xwosdl_sqlk_rdex_unlock(&sql->ossql);
218}

◆ xwos_sqlk_rdex_lock_cpuirq()

static void xwos_sqlk_rdex_lock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h230 行定义.

231{
232 xwosdl_sqlk_rdex_lock_cpuirq(&sql->ossql);
233}

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

248{
249 return xwosdl_sqlk_rdex_trylock_cpuirq(&sql->ossql);
250}

◆ xwos_sqlk_rdex_unlock_cpuirq()

static void xwos_sqlk_rdex_unlock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h259 行定义.

260{
261 xwosdl_sqlk_rdex_unlock_cpuirq(&sql->ossql);
262}

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

277{
278 xwosdl_sqlk_rdex_lock_cpuirqsv(&sql->ossql, cpuirq);
279}

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

296{
297 return xwosdl_sqlk_rdex_trylock_cpuirqsv(&sql->ossql, cpuirq);
298}

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

310{
311 xwosdl_sqlk_rdex_unlock_cpuirqrs(&sql->ossql, cpuirq);
312}

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

330{
331 xwosdl_sqlk_rdex_lock_irqs(&sql->ossql, irqs, num);
332}

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

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

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

368{
369 xwosdl_sqlk_rdex_unlock_irqs(&sql->ossql, irqs, num);
370}

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

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

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

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

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

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

◆ xwos_sqlk_rdex_lock_bh()

static void xwos_sqlk_rdex_lock_bh ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h444 行定义.

445{
446 xwosdl_sqlk_rdex_lock_bh(&sql->ossql);
447}

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

463{
464 return xwosdl_sqlk_rdex_trylock_bh(&sql->ossql);
465}

◆ xwos_sqlk_rdex_unlock_bh()

static void xwos_sqlk_rdex_unlock_bh ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h474 行定义.

475{
476 xwosdl_sqlk_rdex_unlock_bh(&sql->ossql);
477}

◆ xwos_sqlk_wr_lock()

static void xwos_sqlk_wr_lock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:开启写临界区

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

在文件 seqlock.h488 行定义.

489{
490 xwosdl_sqlk_wr_lock(&sql->ossql);
491}
这是这个函数的调用关系图:

◆ xwos_sqlk_wr_trylock()

static xwer_t xwos_sqlk_wr_trylock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:尝试开启写临界区

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

在文件 seqlock.h503 行定义.

504{
505 return xwosdl_sqlk_wr_trylock(&sql->ossql);
506}

◆ xwos_sqlk_wr_unlock()

static void xwos_sqlk_wr_unlock ( struct xwos_sqlk sql)
inlinestatic

XWOS API:关闭写临界区

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

在文件 seqlock.h517 行定义.

518{
519 xwosdl_sqlk_wr_unlock(&sql->ossql);
520}

◆ xwos_sqlk_wr_lock_cpuirq()

static void xwos_sqlk_wr_lock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h532 行定义.

533{
534 xwosdl_sqlk_wr_lock_cpuirq(&sql->ossql);
535}

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

550{
551 return xwosdl_sqlk_wr_trylock_cpuirq(&sql->ossql);
552}

◆ xwos_sqlk_wr_unlock_cpuirq()

static void xwos_sqlk_wr_unlock_cpuirq ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h561 行定义.

562{
563 xwosdl_sqlk_wr_unlock_cpuirq(&sql->ossql);
564}

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

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

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

598{
599 return xwosdl_sqlk_wr_trylock_cpuirqsv(&sql->ossql, cpuirq);
600}

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

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

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

632{
633 xwosdl_sqlk_wr_lock_irqs(&sql->ossql, irqs, num);
634}

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

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

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

670{
671 xwosdl_sqlk_wr_unlock_irqs(&sql->ossql, irqs, num);
672}

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

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

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

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

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

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

◆ xwos_sqlk_wr_lock_bh()

static void xwos_sqlk_wr_lock_bh ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h747 行定义.

748{
749 xwosdl_sqlk_wr_lock_bh(&sql->ossql);
750}

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

766{
767 return xwosdl_sqlk_wr_trylock_bh(&sql->ossql);
768}

◆ xwos_sqlk_wr_unlock_bh()

static void xwos_sqlk_wr_unlock_bh ( struct xwos_sqlk sql)
inlinestatic

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

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

在文件 seqlock.h779 行定义.

780{
781 xwosdl_sqlk_wr_unlock_bh(&sql->ossql);
782}