技术参考手册: 互斥锁
互斥锁的静态初始化、销毁
互斥锁的动态创建、删除
解锁
上锁
获取锁状态
互斥锁对象的生命周期管理
- 通过 对象指针 管理生命周期:
- 通过 对象描述符 管理生命周期:
对象描述符和对象标签
已知互斥锁对象的指针的情况下,可以通过 xwos_mtx_get_d() 获取 xwos_mtx_d , 或可以通过 xwos_mtx_get_tik() 获取对象标签。
C++
C++头文件: xwos/osal/lock/mtx.hxx 
◆ XWOS_MTX_NILD
XWOS API:空的互斥锁对象描述符 
在文件 mtx.h 第 97 行定义.
 
 
◆ xwos_mtx_acquire()
XWOS API:检查互斥锁对象的标签并增加引用计数 
- 参数
- 
  
  
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -ENILOBJD | 空的对象描述符 |  | -EOBJDEAD | 对象无效 |  | -EACCES | 对象标签检查失败 |  
 
- 注解
- 
在文件 mtx.h 第 214 行定义.
  215{
  216        return xwosdl_mtx_acquire(&mtxd.
mtx->
osmtx, mtxd.
tik);
 
  217}
 
 
◆ xwos_mtx_create()
XWOS API:动态方式创建互斥锁 
- 参数
- 
  
    | [out] | mtxd | 指向缓冲区的指针,通过此缓冲区返回互斥锁对象描述符 |  | [in] | sprio | 互斥锁的静态优先级 |  
 
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -EFAULT | 无效的指针或空指针 |  | -EINVAL | 无效参数 |  | -ENOMEM | 内存不足 |  
 
- 注解
- 
在文件 mtx.h 第 182 行定义.
  183{
  184        return xwosdl_mtx_create((xwosdl_mtx_d *)mtxd, sprio);
  185}
 
 
◆ xwos_mtx_delete()
XWOS API:删除动态方式创建的互斥锁 
- 参数
- 
  
  
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -EFAULT | 无效的指针或空指针 |  
 
- 注解
- 
在文件 mtx.h 第 197 行定义.
  198{
  199        return xwosdl_mtx_delete(&mtxd.
mtx->
osmtx, mtxd.
tik);
 
  200}
 
 
◆ xwos_mtx_fini()
XWOS API:销毁静态方式初始化的互斥锁 
- 参数
- 
  
  
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -EFAULT | 无效的指针或空指针 |  
 
- 注解
- 
在文件 mtx.h 第 126 行定义.
  127{
  128        return xwosdl_mtx_fini(&mtx->
osmtx);
 
  129}
 
 
◆ xwos_mtx_get_d()
XWOS API:获取互斥锁对象的描述符 
- 参数
- 
  
  
- 返回
- 互斥锁对象的描述符 
- 注解
- 
在文件 mtx.h 第 257 行定义.
  258{
  260 
  262        mtxd.
tik = xwosdl_mtx_get_tik(&mtx->
osmtx);
 
  263        return mtxd;
  264}
 
 
◆ xwos_mtx_get_status()
XWOS API:获取锁的状态 
- 参数
- 
  
    | [in] | mtx | 互斥锁对象的指针 |  | [out] | status | 指向缓冲区的指针,通过此缓冲区返回锁的状态 |  
 
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -EFAULT | 空指针 |  | -EOBJDEAD | 互斥锁对象无效 |  
 
- 注解
- 
在文件 mtx.h 第 387 行定义.
  388{
  389        return xwosdl_mtx_get_status(&mtx->
osmtx, lkst);
 
  390}
 
 
◆ xwos_mtx_get_tik()
XWOS API:获取互斥锁对象的标签 
- 参数
- 
  
  
- 返回
- 互斥锁对象的标签 
- 注解
- 
在文件 mtx.h 第 244 行定义.
  245{
  246        return xwosdl_mtx_get_tik(&mtx->
osmtx);
 
  247}
 
 
◆ xwos_mtx_grab()
XWOS API:增加互斥锁对象的引用计数 
- 参数
- 
  
  
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -EFAULT | 空指针 |  | -EOBJDEAD | 对象无效 |  
 
- 注解
- 
此函数主要用于管理 静态对象 的引用计数。 若用于 动态对象 ,需要确保对象的指针一定不是野指针。 
在文件 mtx.h 第 145 行定义.
  146{
  147        return xwosdl_mtx_grab(&mtx->
osmtx);
 
  148}
 
 
◆ xwos_mtx_init()
XWOS API:静态方式初始化互斥锁 
- 参数
- 
  
    | [in] | mtx | 互斥锁的指针 |  | [in] | sprio | 互斥锁的静态优先级 |  
 
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -EFAULT | 无效的指针或空指针 |  | -EINVAL | 无效参数 |  
 
- 注解
- 
在文件 mtx.h 第 111 行定义.
  112{
  113        return xwosdl_mtx_init(&mtx->
osmtx, sprio);
 
  114}
 
 
◆ xwos_mtx_lock()
XWOS API:等待并上锁互斥锁 
- 参数
- 
  
  
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -EFAULT | 无效的指针或空指针 |  | -EOBJDEAD | 互斥锁对象无效 |  | -EINTR | 等待被中断 |  | -ENOTTHDCTX | 不在线程上下文中 |  | -EDSPMPT | 抢占被关闭 |  | -EDSBH | 中断底半部被关闭 |  
 
- 注解
- 
- 如果无法上锁,调用此CAPI的线程会阻塞等待,直到互斥锁可被上锁,或等待被中断。
- 线程的阻塞等待可能被中断,此时,API返回 -EINTR。
在文件 mtx.h 第 302 行定义.
  303{
  304        return xwosdl_mtx_lock(&mtx->
osmtx);
 
  305}
 
 
◆ xwos_mtx_lock_to()
XWOS API:限时等待上锁互斥锁 
- 参数
- 
  
    | [in] | mtx | 互斥锁对象的指针 |  | [in] | to | 期望唤醒的时间点 |  
 
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -EFAULT | 无效的指针或空指针 |  | -EOBJDEAD | 互斥锁对象无效 |  | -EINTR | 等待被中断 |  | -ETIMEDOUT | 超时 |  | -ENOTTHDCTX | 不在线程上下文中 |  | -EDSPMPT | 抢占被关闭 |  | -EDSBH | 中断底半部被关闭 |  
 
- 注解
- 
to 表示等待超时的时间点:
- to通常是未来的时间,即 当前系统时间 +- delta, 可以使用- xwtm_ft(delta)表示;
- 如果 to是过去的时间点,将直接返回-ETIMEDOUT。
在文件 mtx.h 第 329 行定义.
  330{
  331        return xwosdl_mtx_lock_to(&mtx->
osmtx, to);
 
  332}
 
 
◆ xwos_mtx_lock_unintr()
XWOS API:等待并上锁互斥锁,且等待不可被中断 
- 参数
- 
  
  
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -EFAULT | 无效的指针或空指针 |  | -EOBJDEAD | 互斥锁对象无效 |  | -ENOTTHDCTX | 不在线程上下文中 |  | -EDSPMPT | 抢占被关闭 |  | -EDSBH | 中断底半部被关闭 |  
 
- 注解
- 
在文件 mtx.h 第 348 行定义.
  349{
  350        return xwosdl_mtx_lock_unintr(&mtx->
osmtx);
 
  351}
 
 
◆ xwos_mtx_put()
XWOS API:减少互斥锁对象的引用计数 
- 参数
- 
  
  
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -EFAULT | 空指针 |  | -EOBJDEAD | 对象无效 |  
 
- 注解
- 
此函数主要用于管理 静态对象 的引用计数。 若用于 动态对象 ,需要确保对象的指针一定不是野指针。 
在文件 mtx.h 第 164 行定义.
  165{
  166        return xwosdl_mtx_put(&mtx->
osmtx);
 
  167}
 
 
◆ xwos_mtx_release()
XWOS API:检查对象的标签并减少引用计数 
- 参数
- 
  
  
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -ENILOBJD | 空的对象描述符 |  | -EOBJDEAD | 对象无效 |  | -EACCES | 对象标签检查失败 |  
 
- 注解
- 
在文件 mtx.h 第 231 行定义.
  232{
  233        return xwosdl_mtx_release(&mtxd.
mtx->
osmtx, mtxd.
tik);
 
  234}
 
 
◆ xwos_mtx_trylock()
XWOS API:尝试上锁互斥锁,不会阻塞调用线程 
- 参数
- 
  
  
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -EFAULT | 无效的指针或空指针 |  | -EOBJDEAD | 互斥锁对象无效 |  | -EWOULDBLOCK | 尝试获取锁失败 |  | -ENOTTHDCTX | 不在线程上下文中 |  
 
- 注解
- 
此函数虽然不会阻塞调用线程,但也不可在中断上下文中使用, 因为在OS中互斥锁通常需要记录自己的拥有者(一般是线程对象结构体), 中断上下文不存在对应的线程对象结构体。 
在文件 mtx.h 第 370 行定义.
  371{
  372        return xwosdl_mtx_trylock(&mtx->
osmtx);
 
  373}
 
 
◆ xwos_mtx_unlock()
XWOS API:解锁互斥锁 
- 参数
- 
  
  
- 返回
- 错误码 
- 返回值
- 
  
    | XWOK | 没有错误 |  | -EFAULT | 无效的指针或空指针 |  | -EOBJDEAD | 互斥锁对象无效 |  | -EOWNER | 线程并没有锁定此互斥锁 |  | -ENOTTHDCTX | 不在线程上下文中 |  
 
- 注解
- 
在文件 mtx.h 第 279 行定义.
  280{
  281        return xwosdl_mtx_unlock(&mtx->
osmtx);
 
  282}