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

结构体

struct  xwos_mtx
 XWOS API:互斥锁 更多...
 
struct  xwos_mtx_d
 XWOS API:互斥锁对象描述符 更多...
 

宏定义

#define XWOS_MTX_NILD   ((xwos_mtx_d){NULL, 0,})
 XWOS API:空的互斥锁对象描述符
 

函数

static xwer_t xwos_mtx_init (struct xwos_mtx *mtx, xwpr_t sprio)
 XWOS API:静态方式初始化互斥锁
 
static xwer_t xwos_mtx_fini (struct xwos_mtx *mtx)
 XWOS API:销毁静态方式初始化的互斥锁
 
static xwer_t xwos_mtx_grab (struct xwos_mtx *mtx)
 XWOS API:增加互斥锁对象的引用计数
 
static xwer_t xwos_mtx_put (struct xwos_mtx *mtx)
 XWOS API:减少互斥锁对象的引用计数
 
static xwer_t xwos_mtx_create (xwos_mtx_d *mtxd, xwpr_t sprio)
 XWOS API:动态方式创建互斥锁
 
static xwer_t xwos_mtx_delete (xwos_mtx_d mtxd)
 XWOS API:删除动态方式创建的互斥锁
 
static xwer_t xwos_mtx_acquire (xwos_mtx_d mtxd)
 XWOS API:检查互斥锁对象的标签并增加引用计数
 
static xwer_t xwos_mtx_release (xwos_mtx_d mtxd)
 XWOS API:检查对象的标签并减少引用计数
 
static xwsq_t xwos_mtx_get_tik (struct xwos_mtx *mtx)
 XWOS API:获取互斥锁对象的标签
 
static xwos_mtx_d xwos_mtx_get_d (struct xwos_mtx *mtx)
 XWOS API:获取互斥锁对象的描述符
 
static xwer_t xwos_mtx_unlock (struct xwos_mtx *mtx)
 XWOS API:解锁互斥锁
 
static xwer_t xwos_mtx_lock (struct xwos_mtx *mtx)
 XWOS API:等待并上锁互斥锁
 
static xwer_t xwos_mtx_lock_to (struct xwos_mtx *mtx, xwtm_t to)
 XWOS API:限时等待上锁互斥锁
 
static xwer_t xwos_mtx_lock_unintr (struct xwos_mtx *mtx)
 XWOS API:等待并上锁互斥锁,且等待不可被中断
 
static xwer_t xwos_mtx_trylock (struct xwos_mtx *mtx)
 XWOS API:尝试上锁互斥锁,不会阻塞调用线程
 
static xwer_t xwos_mtx_get_status (struct xwos_mtx *mtx, xwsq_t *lkst)
 XWOS API:获取锁的状态
 

详细描述

技术参考手册: 互斥锁

互斥锁的静态初始化、销毁

互斥锁的动态创建、删除

解锁

上锁

获取锁状态

互斥锁对象的生命周期管理

对象描述符和对象标签

已知互斥锁对象的指针的情况下,可以通过 xwos_mtx_get_d() 获取 xwos_mtx_d , 或可以通过 xwos_mtx_get_tik() 获取对象标签。

宏定义说明

◆ XWOS_MTX_NILD

#define XWOS_MTX_NILD   ((xwos_mtx_d){NULL, 0,})

XWOS API:空的互斥锁对象描述符

在文件 mtx.h93 行定义.

函数说明

◆ xwos_mtx_init()

static xwer_t xwos_mtx_init ( struct xwos_mtx mtx,
xwpr_t  sprio 
)
inlinestatic

XWOS API:静态方式初始化互斥锁

参数
[in]mtx互斥锁的指针
[in]sprio互斥锁的静态优先级
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EINVAL无效参数
注解
  • 上下文:任意

在文件 mtx.h107 行定义.

108{
109 return xwosdl_mtx_init(&mtx->osmtx, sprio);
110}
struct xwmp_mtx osmtx
Definition mtx.h:79
这是这个函数的调用关系图:

◆ xwos_mtx_fini()

static xwer_t xwos_mtx_fini ( struct xwos_mtx mtx)
inlinestatic

XWOS API:销毁静态方式初始化的互斥锁

参数
[in]mtx互斥锁的指针
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
注解
  • 上下文:任意

在文件 mtx.h122 行定义.

123{
124 return xwosdl_mtx_fini(&mtx->osmtx);
125}
这是这个函数的调用关系图:

◆ xwos_mtx_grab()

static xwer_t xwos_mtx_grab ( struct xwos_mtx mtx)
inlinestatic

XWOS API:增加互斥锁对象的引用计数

参数
[in]mtx互斥锁对象的指针
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EOBJDEAD对象无效
注解
  • 上下文:任意

此函数主要用于管理 静态对象 的引用计数。 若用于 动态对象 ,需要确保对象的指针一定不是野指针。

在文件 mtx.h141 行定义.

142{
143 return xwosdl_mtx_grab(&mtx->osmtx);
144}
这是这个函数的调用关系图:

◆ xwos_mtx_put()

static xwer_t xwos_mtx_put ( struct xwos_mtx mtx)
inlinestatic

XWOS API:减少互斥锁对象的引用计数

参数
[in]mtx互斥锁对象的指针
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EOBJDEAD对象无效
注解
  • 上下文:任意

此函数主要用于管理 静态对象 的引用计数。 若用于 动态对象 ,需要确保对象的指针一定不是野指针。

在文件 mtx.h160 行定义.

161{
162 return xwosdl_mtx_put(&mtx->osmtx);
163}
这是这个函数的调用关系图:

◆ xwos_mtx_create()

static xwer_t xwos_mtx_create ( xwos_mtx_d mtxd,
xwpr_t  sprio 
)
inlinestatic

XWOS API:动态方式创建互斥锁

参数
[out]mtxd指向缓冲区的指针,通过此缓冲区返回互斥锁对象描述符
[in]sprio互斥锁的静态优先级
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EINVAL无效参数
-ENOMEM内存不足
注解
  • 上下文:任意

在文件 mtx.h178 行定义.

179{
180 return xwosdl_mtx_create((xwosdl_mtx_d *)mtxd, sprio);
181}
这是这个函数的调用关系图:

◆ xwos_mtx_delete()

static xwer_t xwos_mtx_delete ( xwos_mtx_d  mtxd)
inlinestatic

XWOS API:删除动态方式创建的互斥锁

参数
[in]mtxd互斥锁对象描述符
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
注解
  • 上下文:任意

在文件 mtx.h193 行定义.

194{
195 return xwosdl_mtx_delete(&mtxd.mtx->osmtx, mtxd.tik);
196}
xwsq_t tik
Definition mtx.h:87
struct xwos_mtx * mtx
Definition mtx.h:86
这是这个函数的调用关系图:

◆ xwos_mtx_acquire()

static xwer_t xwos_mtx_acquire ( xwos_mtx_d  mtxd)
inlinestatic

XWOS API:检查互斥锁对象的标签并增加引用计数

参数
[in]mtxd互斥锁对象描述符
返回
错误码
返回值
XWOK没有错误
-ENILOBJD空的对象描述符
-EOBJDEAD对象无效
-EACCES对象标签检查失败
注解
  • 上下文:任意

在文件 mtx.h210 行定义.

211{
212 return xwosdl_mtx_acquire(&mtxd.mtx->osmtx, mtxd.tik);
213}
这是这个函数的调用关系图:

◆ xwos_mtx_release()

static xwer_t xwos_mtx_release ( xwos_mtx_d  mtxd)
inlinestatic

XWOS API:检查对象的标签并减少引用计数

参数
[in]mtxd互斥锁对象描述符
返回
错误码
返回值
XWOK没有错误
-ENILOBJD空的对象描述符
-EOBJDEAD对象无效
-EACCES对象标签检查失败
注解
  • 上下文:任意

在文件 mtx.h227 行定义.

228{
229 return xwosdl_mtx_release(&mtxd.mtx->osmtx, mtxd.tik);
230}
这是这个函数的调用关系图:

◆ xwos_mtx_get_tik()

static xwsq_t xwos_mtx_get_tik ( struct xwos_mtx mtx)
inlinestatic

XWOS API:获取互斥锁对象的标签

参数
[in]mtx互斥锁对象的指针
返回
互斥锁对象的标签
注解
  • 上下文:任意

在文件 mtx.h240 行定义.

241{
242 return xwosdl_mtx_get_tik(&mtx->osmtx);
243}

◆ xwos_mtx_get_d()

static xwos_mtx_d xwos_mtx_get_d ( struct xwos_mtx mtx)
inlinestatic

XWOS API:获取互斥锁对象的描述符

参数
[in]mtx互斥锁对象的指针
返回
互斥锁对象的描述符
注解
  • 上下文:任意

在文件 mtx.h253 行定义.

254{
255 xwos_mtx_d mtxd;
256
257 mtxd.mtx = mtx;
258 mtxd.tik = xwosdl_mtx_get_tik(&mtx->osmtx);
259 return mtxd;
260}
XWOS API:互斥锁对象描述符
Definition mtx.h:85

◆ xwos_mtx_unlock()

static xwer_t xwos_mtx_unlock ( struct xwos_mtx mtx)
inlinestatic

XWOS API:解锁互斥锁

参数
[in]mtx互斥锁对象的指针
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EOBJDEAD互斥锁对象无效
-EOWNER线程并没有锁定此互斥锁
-ENOTTHDCTX不在线程上下文中
注解
  • 上下文:线程

在文件 mtx.h275 行定义.

276{
277 return xwosdl_mtx_unlock(&mtx->osmtx);
278}
这是这个函数的调用关系图:

◆ xwos_mtx_lock()

static xwer_t xwos_mtx_lock ( struct xwos_mtx mtx)
inlinestatic

XWOS API:等待并上锁互斥锁

参数
[in]mtx互斥锁对象的指针
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EOBJDEAD互斥锁对象无效
-EINTR等待被中断
-ENOTTHDCTX不在线程上下文中
-EDSPMPT抢占被关闭
-EDSBH中断底半部被关闭
注解
  • 上下文:线程
  • 如果无法上锁,调用此CAPI的线程会阻塞等待,直到互斥锁可被上锁,或等待被中断。
  • 线程的阻塞等待可能被中断,此时,API返回 -EINTR

在文件 mtx.h298 行定义.

299{
300 return xwosdl_mtx_lock(&mtx->osmtx);
301}

◆ xwos_mtx_lock_to()

static xwer_t xwos_mtx_lock_to ( struct xwos_mtx mtx,
xwtm_t  to 
)
inlinestatic

XWOS API:限时等待上锁互斥锁

参数
[in]mtx互斥锁对象的指针
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EOBJDEAD互斥锁对象无效
-EINTR等待被中断
-ETIMEDOUT超时
-ENOTTHDCTX不在线程上下文中
-EDSPMPT抢占被关闭
-EDSBH中断底半部被关闭
注解
  • 上下文:线程

to 表示等待超时的时间点:

  • to 通常是未来的时间,即 当前系统时间 + delta , 可以使用 xwtm_ft(delta) 表示;
  • 如果 to 是过去的时间点,将直接返回 -ETIMEDOUT

在文件 mtx.h325 行定义.

326{
327 return xwosdl_mtx_lock_to(&mtx->osmtx, to);
328}
这是这个函数的调用关系图:

◆ xwos_mtx_lock_unintr()

static xwer_t xwos_mtx_lock_unintr ( struct xwos_mtx mtx)
inlinestatic

XWOS API:等待并上锁互斥锁,且等待不可被中断

参数
[in]mtx互斥锁对象的指针
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EOBJDEAD互斥锁对象无效
-ENOTTHDCTX不在线程上下文中
-EDSPMPT抢占被关闭
-EDSBH中断底半部被关闭
注解
  • 上下文:线程

在文件 mtx.h344 行定义.

345{
346 return xwosdl_mtx_lock_unintr(&mtx->osmtx);
347}

◆ xwos_mtx_trylock()

static xwer_t xwos_mtx_trylock ( struct xwos_mtx mtx)
inlinestatic

XWOS API:尝试上锁互斥锁,不会阻塞调用线程

参数
[in]mtx互斥锁对象的指针
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EOBJDEAD互斥锁对象无效
-EWOULDBLOCK尝试获取锁失败
-ENOTTHDCTX不在线程上下文中
注解
  • 上下文:线程

此函数虽然不会阻塞调用线程,但也不可在中断上下文中使用, 因为在OS中互斥锁通常需要记录自己的拥有者(一般是线程对象结构体), 中断上下文不存在对应的线程对象结构体。

在文件 mtx.h366 行定义.

367{
368 return xwosdl_mtx_trylock(&mtx->osmtx);
369}

◆ xwos_mtx_get_status()

static xwer_t xwos_mtx_get_status ( struct xwos_mtx mtx,
xwsq_t lkst 
)
inlinestatic

XWOS API:获取锁的状态

参数
[in]mtx互斥锁对象的指针
[out]status指向缓冲区的指针,通过此缓冲区返回锁的状态
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EOBJDEAD互斥锁对象无效
注解
  • 上下文:任意

在文件 mtx.h383 行定义.

384{
385 return xwosdl_mtx_get_status(&mtx->osmtx, lkst);
386}