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

详细描述

技术参考手册: 自旋锁

自旋锁的初始化

锁模式

宏定义说明

◆ XWOS_SPLK_INITIALIZER

#define XWOS_SPLK_INITIALIZER   { .osspl = XWOSDL_SPLK_INITIALIZER, }

XWOS API:自旋锁的初始值

在文件 spinlock.h76 行定义.

函数说明

◆ xwos_splk_init()

static void xwos_splk_init ( struct xwos_splk spl)
inlinestatic

XWOS API:初始化自旋锁

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

在文件 spinlock.h85 行定义.

86{
87 xwosdl_splk_init(&spl->osspl);
88}
xwosdl_splk_t osspl
Definition spinlock.h:70
这是这个函数的调用关系图:

◆ xwos_splk_lock()

static void xwos_splk_lock ( struct xwos_splk spl)
inlinestatic

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

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

在文件 spinlock.h99 行定义.

100{
101 xwosdl_splk_lock(&spl->osspl);
102}
这是这个函数的调用关系图:

◆ xwos_splk_trylock()

static xwer_t xwos_splk_trylock ( struct xwos_splk spl)
inlinestatic

XWOS API:尝试上锁自旋锁

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

在文件 spinlock.h117 行定义.

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

◆ xwos_splk_unlock()

static void xwos_splk_unlock ( struct xwos_splk spl)
inlinestatic

XWOS API:解锁自旋锁

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

在文件 spinlock.h129 行定义.

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

◆ xwos_splk_lock_cpuirq()

static void xwos_splk_lock_cpuirq ( struct xwos_splk spl)
inlinestatic

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

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

在文件 spinlock.h143 行定义.

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

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

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

◆ xwos_splk_unlock_cpuirq()

static void xwos_splk_unlock_cpuirq ( struct xwos_splk spl)
inlinestatic

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

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

在文件 spinlock.h173 行定义.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

◆ xwos_splk_lock_bh()

static void xwos_splk_lock_bh ( struct xwos_splk spl)
inlinestatic

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

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

在文件 spinlock.h354 行定义.

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

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

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

◆ xwos_splk_unlock_bh()

static void xwos_splk_unlock_bh ( struct xwos_splk spl)
inlinestatic

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

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

在文件 spinlock.h385 行定义.

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