XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
xwos::lock::SMtx::Grd类 参考

静态互斥锁的RAII机制守卫 更多...

#include <SMtx.hxx>

xwos::lock::SMtx::Grd 的协作图:

Public 成员函数

 Grd ()=delete
 
 Grd (SMtx *mtx, enum LockMode mode=LockMode::SMtxLock, xwtm_t to=XWTM_MAX)
 构造静态互斥锁的RAII机制守卫并上锁互斥锁
 
 Grd (SMtx &mtx, enum LockMode mode=LockMode::SMtxLock, xwtm_t to=XWTM_MAX)
 构造静态互斥锁的RAII机制守卫并上锁互斥锁
 
 ~Grd ()
 析构静态互斥锁的RAII机制守卫并解锁互斥锁
 
xwer_t getRc ()
 获取上锁结果错误码
 
enum LockMode getLockMode ()
 获取上锁模式
 
xwer_t wait (sync::Cond *cond)
 等待条件量
 
xwer_t wait (sync::Cond &cond)
 等待条件量
 
xwer_t wait (sync::Cond *cond, xwtm_t to)
 限时等待条件量
 
xwer_t wait (sync::Cond &cond, xwtm_t to)
 限时等待条件量
 

Private 属性

SMtxmMtx
 
xwer_t mRc
 
enum LockMode mLockMode
 

详细描述

静态互斥锁的RAII机制守卫

在文件 SMtx.hxx93 行定义.

构造及析构函数说明

◆ Grd() [1/3]

xwos::lock::SMtx::Grd::Grd ( )
delete

◆ Grd() [2/3]

xwos::lock::SMtx::Grd::Grd ( SMtx mtx,
enum LockMode  mode = LockMode::SMtxLock,
xwtm_t  to = XWTM_MAX 
)

构造静态互斥锁的RAII机制守卫并上锁互斥锁

参数
[in]mtx静态互斥锁对象指针
[in]mode锁模式,取值 SMtx::LockMode
[in]to期望唤醒的时间点, 仅当 mode == SMtx::LockMode::SMtxLockTimed 时有效。
注解
  • 上下文:线程

在文件 SMtx.cxx19 行定义.

20 : mMtx(mtx)
21 , mLockMode(mode)
22{
23 if (nullptr != mMtx) {
24 switch (mode) {
27 break;
30 break;
33 break;
36 break;
38 mRc = XWOK;
39 break;
40 default:
42 mRc = XWOK;
43 break;
44 }
45 }
46}
enum LockMode mLockMode
Definition SMtx.hxx:98
struct xwos_mtx mLock
Definition SMtx.hxx:263
@ SMtxLockUninterruptable
Definition SMtx.hxx:84
#define XWOK
No error
Definition errno.h:182
static xwer_t xwos_mtx_lock_to(struct xwos_mtx *mtx, xwtm_t to)
XWOS API:限时等待上锁互斥锁
Definition mtx.h:329
static xwer_t xwos_mtx_trylock(struct xwos_mtx *mtx)
XWOS API:尝试上锁互斥锁,不会阻塞调用线程
Definition mtx.h:370
static xwer_t xwos_mtx_lock(struct xwos_mtx *mtx)
XWOS API:等待并上锁互斥锁
Definition mtx.h:302
static xwer_t xwos_mtx_lock_unintr(struct xwos_mtx *mtx)
XWOS API:等待并上锁互斥锁,且等待不可被中断
Definition mtx.h:348
函数调用图:

◆ Grd() [3/3]

xwos::lock::SMtx::Grd::Grd ( SMtx mtx,
enum LockMode  mode = LockMode::SMtxLock,
xwtm_t  to = XWTM_MAX 
)

构造静态互斥锁的RAII机制守卫并上锁互斥锁

参数
[in]mode锁模式,取值 SMtx::LockMode
[in]to期望唤醒的时间点, 仅当 mode == SMtx::LockMode::SMtxLockTimed 时有效。

◆ ~Grd()

xwos::lock::SMtx::Grd::~Grd ( )

析构静态互斥锁的RAII机制守卫并解锁互斥锁

在文件 SMtx.cxx48 行定义.

49{
50 if (nullptr != mMtx) {
53 }
54 }
55}
static xwer_t xwos_mtx_unlock(struct xwos_mtx *mtx)
XWOS API:解锁互斥锁
Definition mtx.h:279
函数调用图:

成员函数说明

◆ getLockMode()

enum LockMode xwos::lock::SMtx::Grd::getLockMode ( )
inline

获取上锁模式

在文件 SMtx.hxx175 行定义.

175{ return mLockMode; }

◆ getRc()

xwer_t xwos::lock::SMtx::Grd::getRc ( )
inline

获取上锁结果错误码

返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EOBJDEAD互斥锁对象无效
-EINTR等待被中断
-ETIMEDOUT超时
-ENOTTHDCTX不在线程上下文中
-EDSPMPT抢占被关闭
-EDSBH中断底半部被关闭

在文件 SMtx.hxx170 行定义.

170{ return mRc; }

◆ wait() [1/4]

xwer_t xwos::lock::SMtx::Grd::wait ( sync::Cond cond)
inline

等待条件量

参数
[in]cond条件量对象的引用
返回
错误码
注解
  • 上下文:线程

在文件 SMtx.hxx213 行定义.

213{ return wait(&cond); }
xwer_t wait(sync::Cond *cond)
等待条件量
Definition SMtx.cxx:57
函数调用图:
这是这个函数的调用关系图:

◆ wait() [2/4]

xwer_t xwos::lock::SMtx::Grd::wait ( sync::Cond cond,
xwtm_t  to 
)
inline

限时等待条件量

参数
[in]cond条件量对象的引用
[in]to期望唤醒的时间点
返回
错误码
注解
  • 上下文:线程

在文件 SMtx.hxx259 行定义.

259{ return wait(&cond, to); }
函数调用图:
这是这个函数的调用关系图:

◆ wait() [3/4]

xwer_t xwos::lock::SMtx::Grd::wait ( sync::Cond cond)

等待条件量

参数
[in]cond条件量对象的指针
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EINVAL参数无效
-EINTR等待被中断
-ENOTTHDCTX不在线程上下文中
注解
  • 上下文:线程

在文件 SMtx.cxx57 行定义.

58{
59 xwer_t rc;
60 if (nullptr != mMtx) {
61 union xwos_ulock lock;
62 xwsq_t lkst;
63 lock.osal.mtx = &mMtx->mLock;
65 rc = xwos_cond_wait_unintr(cond->getXwosObj(), lock, XWOS_LK_MTX, nullptr, &lkst);
66 } else {
67 rc = xwos_cond_wait(cond->getXwosObj(), lock, XWOS_LK_MTX, nullptr, &lkst);
68 }
69 if (rc < 0) {
70 if (XWOS_LKST_UNLOCKED == lkst) {
72 }
73 }
74 } else {
75 rc = -EFAULT;
76 }
77 return rc;
78}
#define EFAULT
Bad address
Definition errno.h:44
signed long xwer_t
Definition type.h:554
unsigned long xwsq_t
Definition type.h:445
@ XWOS_LKST_UNLOCKED
Definition type.h:661
@ XWOS_LK_MTX
Definition type.h:641
static xwer_t xwos_cond_wait_unintr(struct xwos_cond *cond, union xwos_ulock lock, xwsq_t lktype, void *lkdata, xwsq_t *lkst)
XWOS API:不可中断地等待条件量
Definition cond.h:543
static xwer_t xwos_cond_wait(struct xwos_cond *cond, union xwos_ulock lock, xwsq_t lktype, void *lkdata, xwsq_t *lkst)
XWOS API:等待条件量
Definition cond.h:432
所有锁的联合
Definition type.h:680
struct xwmp_mtx * mtx
Definition type.h:682
union xwos_ulock::@8 osal
函数调用图:

◆ wait() [4/4]

xwer_t xwos::lock::SMtx::Grd::wait ( sync::Cond cond,
xwtm_t  to 
)

限时等待条件量

参数
[in]cond条件量对象的指针
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EINVAL参数无效
-ETIMEDOUT超时
-EINTR等待被中断
-ENOTTHDCTX不在线程上下文中
注解
  • 上下文:线程

在文件 SMtx.cxx80 行定义.

81{
82 xwer_t rc;
83 if (nullptr != mMtx) {
84 union xwos_ulock lock;
85 xwsq_t lkst;
86
87 lock.osal.mtx = &mMtx->mLock;
89 rc = xwos_cond_wait_unintr(cond->getXwosObj(), lock, XWOS_LK_MTX, nullptr, &lkst);
90 } else {
91 rc = xwos_cond_wait_to(cond->getXwosObj(), lock, XWOS_LK_MTX, nullptr, to, &lkst);
92 }
93 if (rc < 0) {
94 if (XWOS_LKST_UNLOCKED == lkst) {
96 }
97 }
98 } else {
99 rc = -EFAULT;
100 }
101 return rc;
102}
static xwer_t xwos_cond_wait_to(struct xwos_cond *cond, union xwos_ulock lock, xwsq_t lktype, void *lkdata, xwtm_t to, xwsq_t *lkst)
XWOS API:限时等待条件量
Definition cond.h:492
函数调用图:

结构体成员变量说明

◆ mLockMode

enum LockMode xwos::lock::SMtx::Grd::mLockMode
private

在文件 SMtx.hxx98 行定义.

◆ mMtx

SMtx* xwos::lock::SMtx::Grd::mMtx
private

在文件 SMtx.hxx96 行定义.

◆ mRc

xwer_t xwos::lock::SMtx::Grd::mRc
private

内部上锁CAPI的返回值

在文件 SMtx.hxx97 行定义.


该类的文档由以下文件生成: