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

结构体

struct  xwos_splk
 XWOS API:自旋锁 更多...
 

宏定义

#define XWOS_SPLK_INITIALIZER   { .osspl = XWOSDL_SPLK_INITIALIZER, }
 XWOS API:自旋锁的初始值
 

函数

static void xwos_splk_init (struct xwos_splk *spl)
 XWOS API:初始化自旋锁
 
static void xwos_splk_lock (struct xwos_splk *spl)
 XWOS API:上锁自旋锁,若自旋锁已开启临界区,就自旋等待
 
static xwer_t xwos_splk_trylock (struct xwos_splk *spl)
 XWOS API:尝试上锁自旋锁
 
static void xwos_splk_unlock (struct xwos_splk *spl)
 XWOS API:解锁自旋锁
 
static void xwos_splk_lock_cpuirq (struct xwos_splk *spl)
 XWOS API:上锁自旋锁,并关闭本地CPU的中断
 
static xwer_t xwos_splk_trylock_cpuirq (struct xwos_splk *spl)
 XWOS API:尝试上锁自旋锁,并关闭本地CPU的中断
 
static void xwos_splk_unlock_cpuirq (struct xwos_splk *spl)
 XWOS API:解锁自旋锁,并开启本地CPU的中断
 
static void xwos_splk_lock_cpuirqsv (struct xwos_splk *spl, xwreg_t *cpuirq)
 XWOS API:上锁自旋锁,保存本地CPU的中断标志并关闭
 
static xwer_t xwos_splk_trylock_cpuirqsv (struct xwos_splk *spl, xwreg_t *cpuirq)
 XWOS API:尝试上锁自旋锁,保存本地CPU的中断标志并关闭
 
static void xwos_splk_unlock_cpuirqrs (struct xwos_splk *spl, xwreg_t cpuirq)
 XWOS API:解锁自旋锁,并恢复本地CPU的中断标志
 
static void xwos_splk_lock_irqs (struct xwos_splk *spl, const xwirq_t irqs[], xwsz_t num)
 XWOS API:上锁自旋锁,并关闭部分中断
 
static xwer_t xwos_splk_trylock_irqs (struct xwos_splk *spl, const xwirq_t irqs[], xwsz_t num)
 XWOS API:尝试上锁自旋锁,并关闭部分中断
 
static void xwos_splk_unlock_irqs (struct xwos_splk *spl, const xwirq_t irqs[], xwsz_t num)
 XWOS API:解锁自旋锁,并开启部分中断
 
static void xwos_splk_lock_irqssv (struct xwos_splk *spl, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
 XWOS API:上锁自旋锁,保存部分中断的中断标志并关闭
 
static xwer_t xwos_splk_trylock_irqssv (struct xwos_splk *spl, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
 XWOS API:尝试上锁自旋锁,保存部分中断的中断标志并关闭
 
static void xwos_splk_unlock_irqsrs (struct xwos_splk *spl, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
 XWOS API:解锁自旋锁,并恢复部分中断的中断标志
 
static void xwos_splk_lock_bh (struct xwos_splk *spl)
 XWOS API:上锁自旋锁,关闭本地CPU的中断底半部
 
static xwer_t xwos_splk_trylock_bh (struct xwos_splk *spl)
 XWOS API:尝试上锁自旋锁,关闭本地CPU的中断底半部
 
static void xwos_splk_unlock_bh (struct xwos_splk *spl)
 XWOS API:解锁自旋锁,开启本地CPU的中断底半部
 

详细描述

技术参考手册: 自旋锁

自旋锁的初始化

锁模式

C++

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

宏定义说明

◆ XWOS_SPLK_INITIALIZER

#define XWOS_SPLK_INITIALIZER   { .osspl = XWOSDL_SPLK_INITIALIZER, }

XWOS API:自旋锁的初始值

在文件 spinlock.h80 行定义.

函数说明

◆ xwos_splk_init()

static void xwos_splk_init ( struct xwos_splk spl)
inlinestatic

XWOS API:初始化自旋锁

参数
[in]spl自旋锁的指针
注解
  • 上下文:任意

在文件 spinlock.h89 行定义.

90{
91 xwosdl_splk_init(&spl->osspl);
92}
xwosdl_splk_t osspl
Definition spinlock.h:74
这是这个函数的调用关系图:

◆ xwos_splk_lock()

static void xwos_splk_lock ( struct xwos_splk spl)
inlinestatic

XWOS API:上锁自旋锁,若自旋锁已开启临界区,就自旋等待

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

在文件 spinlock.h103 行定义.

104{
105 xwosdl_splk_lock(&spl->osspl);
106}
这是这个函数的调用关系图:

◆ xwos_splk_lock_bh()

static void xwos_splk_lock_bh ( struct xwos_splk spl)
inlinestatic

XWOS API:上锁自旋锁,关闭本地CPU的中断底半部

参数
[in]spl自旋锁的指针
注解
  • 上下文:线程、中断底半部
  • 此函数只会关闭本地CPU的抢占和中断底半部, 因此只能保证其临界区在线程上下文与中断底半部中是安全的。

在文件 spinlock.h358 行定义.

359{
360 xwosdl_splk_lock_bh(&spl->osspl);
361}
这是这个函数的调用关系图:

◆ xwos_splk_lock_cpuirq()

static void xwos_splk_lock_cpuirq ( struct xwos_splk spl)
inlinestatic

XWOS API:上锁自旋锁,并关闭本地CPU的中断

参数
[in]spl自旋锁的指针
注解
  • 上下文:任意
  • 此函数会关闭本地CPU的抢占与中断,因此可保证其临界区在所有上下文中都是安全的。

在文件 spinlock.h147 行定义.

148{
149 xwosdl_splk_lock_cpuirq(&spl->osspl);
150}

◆ xwos_splk_lock_cpuirqsv()

static void xwos_splk_lock_cpuirqsv ( struct xwos_splk spl,
xwreg_t cpuirq 
)
inlinestatic

XWOS API:上锁自旋锁,保存本地CPU的中断标志并关闭

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

在文件 spinlock.h192 行定义.

193{
194 xwosdl_splk_lock_cpuirqsv(&spl->osspl, cpuirq);
195}
这是这个函数的调用关系图:

◆ xwos_splk_lock_irqs()

static void xwos_splk_lock_irqs ( struct xwos_splk spl,
const xwirq_t  irqs[],
xwsz_t  num 
)
inlinestatic

XWOS API:上锁自旋锁,并关闭部分中断

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

在文件 spinlock.h241 行定义.

244{
245 xwosdl_splk_lock_irqs(&spl->osspl, irqs, num);
246}

◆ xwos_splk_lock_irqssv()

static void xwos_splk_lock_irqssv ( struct xwos_splk spl,
const xwirq_t  irqs[],
xwreg_t  flags[],
xwsz_t  num 
)
inlinestatic

XWOS API:上锁自旋锁,保存部分中断的中断标志并关闭

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

在文件 spinlock.h300 行定义.

303{
304 xwosdl_splk_lock_irqssv(&spl->osspl, irqs, flags, num);
305}
这是这个函数的调用关系图:

◆ xwos_splk_trylock()

static xwer_t xwos_splk_trylock ( struct xwos_splk spl)
inlinestatic

XWOS API:尝试上锁自旋锁

参数
[in]spl自旋锁的指针
返回
错误码
返回值
XWOK没有错误
-EAGAIN获得自旋锁失败
注解
  • 上下文:线程、空闲任务
  • 若自旋锁已开启临界区,立即返回,不会自旋等待。
  • 此函数只会关闭本地CPU的抢占,因此只能保证其临界区在线程中是安全的。

在文件 spinlock.h121 行定义.

122{
123 return xwosdl_splk_trylock(&spl->osspl);
124}
这是这个函数的调用关系图:

◆ xwos_splk_trylock_bh()

static xwer_t xwos_splk_trylock_bh ( struct xwos_splk spl)
inlinestatic

XWOS API:尝试上锁自旋锁,关闭本地CPU的中断底半部

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

在文件 spinlock.h377 行定义.

378{
379 return xwosdl_splk_trylock_bh(&spl->osspl);
380}
这是这个函数的调用关系图:

◆ xwos_splk_trylock_cpuirq()

static xwer_t xwos_splk_trylock_cpuirq ( struct xwos_splk spl)
inlinestatic

XWOS API:尝试上锁自旋锁,并关闭本地CPU的中断

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

在文件 spinlock.h165 行定义.

166{
167 return xwosdl_splk_trylock_cpuirq(&spl->osspl);
168}

◆ xwos_splk_trylock_cpuirqsv()

static xwer_t xwos_splk_trylock_cpuirqsv ( struct xwos_splk spl,
xwreg_t cpuirq 
)
inlinestatic

XWOS API:尝试上锁自旋锁,保存本地CPU的中断标志并关闭

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

在文件 spinlock.h211 行定义.

212{
213 return xwosdl_splk_trylock_cpuirqsv(&spl->osspl, cpuirq);
214}
这是这个函数的调用关系图:

◆ xwos_splk_trylock_irqs()

static xwer_t xwos_splk_trylock_irqs ( struct xwos_splk spl,
const xwirq_t  irqs[],
xwsz_t  num 
)
inlinestatic

XWOS API:尝试上锁自旋锁,并关闭部分中断

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

在文件 spinlock.h264 行定义.

267{
268 return xwosdl_splk_trylock_irqs(&spl->osspl, irqs, num);
269}

◆ xwos_splk_trylock_irqssv()

static xwer_t xwos_splk_trylock_irqssv ( struct xwos_splk spl,
const xwirq_t  irqs[],
xwreg_t  flags[],
xwsz_t  num 
)
inlinestatic

XWOS API:尝试上锁自旋锁,保存部分中断的中断标志并关闭

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

在文件 spinlock.h324 行定义.

327{
328 return xwosdl_splk_trylock_irqssv(&spl->osspl, irqs, flags, num);
329}
这是这个函数的调用关系图:

◆ xwos_splk_unlock()

static void xwos_splk_unlock ( struct xwos_splk spl)
inlinestatic

XWOS API:解锁自旋锁

参数
[in]spl自旋锁的指针
注解
  • 上下文:线程、空闲任务

在文件 spinlock.h133 行定义.

134{
135 xwosdl_splk_unlock(&spl->osspl);
136}
这是这个函数的调用关系图:

◆ xwos_splk_unlock_bh()

static void xwos_splk_unlock_bh ( struct xwos_splk spl)
inlinestatic

XWOS API:解锁自旋锁,开启本地CPU的中断底半部

参数
[in]spl自旋锁的指针
  • 上下文:线程、中断底半部

在文件 spinlock.h389 行定义.

390{
391 xwosdl_splk_unlock_bh(&spl->osspl);
392}
这是这个函数的调用关系图:

◆ xwos_splk_unlock_cpuirq()

static void xwos_splk_unlock_cpuirq ( struct xwos_splk spl)
inlinestatic

XWOS API:解锁自旋锁,并开启本地CPU的中断

参数
[in]spl自旋锁的指针
注解
  • 上下文:任意

在文件 spinlock.h177 行定义.

178{
179 xwosdl_splk_unlock_cpuirq(&spl->osspl);
180}

◆ xwos_splk_unlock_cpuirqrs()

static void xwos_splk_unlock_cpuirqrs ( struct xwos_splk spl,
xwreg_t  cpuirq 
)
inlinestatic

XWOS API:解锁自旋锁,并恢复本地CPU的中断标志

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

在文件 spinlock.h224 行定义.

225{
226 xwosdl_splk_unlock_cpuirqrs(&spl->osspl, cpuirq);
227}
这是这个函数的调用关系图:

◆ xwos_splk_unlock_irqs()

static void xwos_splk_unlock_irqs ( struct xwos_splk spl,
const xwirq_t  irqs[],
xwsz_t  num 
)
inlinestatic

XWOS API:解锁自旋锁,并开启部分中断

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

在文件 spinlock.h280 行定义.

283{
284 xwosdl_splk_unlock_irqs(&spl->osspl, irqs, num);
285}

◆ xwos_splk_unlock_irqsrs()

static void xwos_splk_unlock_irqsrs ( struct xwos_splk spl,
const xwirq_t  irqs[],
xwreg_t  flags[],
xwsz_t  num 
)
inlinestatic

XWOS API:解锁自旋锁,并恢复部分中断的中断标志

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

在文件 spinlock.h341 行定义.

344{
345 xwosdl_splk_unlock_irqsrs(&spl->osspl, irqs, flags, num);
346}
这是这个函数的调用关系图: