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

结构体

struct  xwos_splk
 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_init()

static void xwos_splk_init ( struct xwos_splk spl)
inlinestatic

XWOS API:初始化自旋锁

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

在文件 spinlock.h84 行定义.

85{
86 xwosdl_splk_init(&spl->osspl);
87}
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.h98 行定义.

99{
100 xwosdl_splk_lock(&spl->osspl);
101}

◆ xwos_splk_lock_bh()

static void xwos_splk_lock_bh ( struct xwos_splk spl)
inlinestatic

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

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

在文件 spinlock.h353 行定义.

354{
355 xwosdl_splk_lock_bh(&spl->osspl);
356}

◆ xwos_splk_lock_cpuirq()

static void xwos_splk_lock_cpuirq ( struct xwos_splk spl)
inlinestatic

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

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

在文件 spinlock.h142 行定义.

143{
144 xwosdl_splk_lock_cpuirq(&spl->osspl);
145}

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

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

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

239{
240 xwosdl_splk_lock_irqs(&spl->osspl, irqs, num);
241}

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

298{
299 xwosdl_splk_lock_irqssv(&spl->osspl, irqs, flags, num);
300}

◆ xwos_splk_trylock()

static xwer_t xwos_splk_trylock ( struct xwos_splk spl)
inlinestatic

XWOS API:尝试上锁自旋锁

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

在文件 spinlock.h116 行定义.

117{
118 return xwosdl_splk_trylock(&spl->osspl);
119}

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

373{
374 return xwosdl_splk_trylock_bh(&spl->osspl);
375}

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

161{
162 return xwosdl_splk_trylock_cpuirq(&spl->osspl);
163}

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

207{
208 return xwosdl_splk_trylock_cpuirqsv(&spl->osspl, cpuirq);
209}

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

262{
263 return xwosdl_splk_trylock_irqs(&spl->osspl, irqs, num);
264}

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

322{
323 return xwosdl_splk_trylock_irqssv(&spl->osspl, irqs, flags, num);
324}

◆ xwos_splk_unlock()

static void xwos_splk_unlock ( struct xwos_splk spl)
inlinestatic

XWOS API:解锁自旋锁

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

在文件 spinlock.h128 行定义.

129{
130 xwosdl_splk_unlock(&spl->osspl);
131}

◆ xwos_splk_unlock_bh()

static void xwos_splk_unlock_bh ( struct xwos_splk spl)
inlinestatic

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

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

在文件 spinlock.h384 行定义.

385{
386 xwosdl_splk_unlock_bh(&spl->osspl);
387}

◆ xwos_splk_unlock_cpuirq()

static void xwos_splk_unlock_cpuirq ( struct xwos_splk spl)
inlinestatic

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

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

在文件 spinlock.h172 行定义.

173{
174 xwosdl_splk_unlock_cpuirq(&spl->osspl);
175}

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

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

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

278{
279 xwosdl_splk_unlock_irqs(&spl->osspl, irqs, num);
280}

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

339{
340 xwosdl_splk_unlock_irqsrs(&spl->osspl, irqs, flags, num);
341}