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

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

#include <DMtx.hxx>

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

Public 成员函数

 Grd ()=delete
 
 Grd (DMtx *mtx, enum LockMode mode=LockMode::DMtxLock, xwtm_t to=XWTM_MAX)
 构造动态互斥锁的RAII机制守卫并上锁互斥锁
 
 Grd (DMtx &mtx, enum LockMode mode=LockMode::DMtxLock, xwtm_t to=XWTM_MAX)
 构造动态互斥锁的RAII机制守卫并上锁互斥锁
 
 ~Grd ()
 析构动态互斥锁的RAII机制守卫并解锁互斥锁
 
xwer_t getRc ()
 获取上锁结果错误码
 
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 属性

DMtxmMtx
 
xwer_t mRc
 
enum LockMode mLockMode
 

详细描述

动态互斥锁的RAII机制守卫

在文件 DMtx.hxx92 行定义.

构造及析构函数说明

◆ Grd() [1/3]

xwos::lock::DMtx::Grd::Grd ( )
delete

◆ Grd() [2/3]

xwos::lock::DMtx::Grd::Grd ( DMtx mtx,
enum LockMode  mode = LockMode::DMtxLock,
xwtm_t  to = XWTM_MAX 
)

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

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

在文件 DMtx.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 DMtx.hxx:97
xwos_mtx_d mMtxDesc
Definition DMtx.hxx:258
@ DMtxLockUninterruptable
Definition DMtx.hxx:83
#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
struct xwos_mtx * mtx
Definition mtx.h:90
函数调用图:

◆ Grd() [3/3]

xwos::lock::DMtx::Grd::Grd ( DMtx mtx,
enum LockMode  mode = LockMode::DMtxLock,
xwtm_t  to = XWTM_MAX 
)

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

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

◆ ~Grd()

xwos::lock::DMtx::Grd::~Grd ( )

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

在文件 DMtx.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
函数调用图:

成员函数说明

◆ getRc()

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

获取上锁结果错误码

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

在文件 DMtx.hxx170 行定义.

170{ return mRc; }

◆ wait() [1/4]

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

等待条件量

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

在文件 DMtx.hxx208 行定义.

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

◆ wait() [2/4]

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

限时等待条件量

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

在文件 DMtx.hxx254 行定义.

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

◆ wait() [3/4]

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

等待条件量

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

在文件 DMtx.cxx57 行定义.

58{
59 xwer_t rc;
60 if (nullptr != mMtx) {
61 union xwos_ulock lock;
62 xwsq_t lkst;
63
64 lock.osal.mtx = mMtx->mMtxDesc.mtx;
66 rc = xwos_cond_wait_unintr(cond->getXwosObj(), lock, XWOS_LK_MTX, nullptr, &lkst);
67 } else {
68 rc = xwos_cond_wait(cond->getXwosObj(), lock, XWOS_LK_MTX, nullptr, &lkst);
69 }
70 if (rc < 0) {
71 if (XWOS_LKST_UNLOCKED == lkst) {
73 }
74 }
75 } else {
76 rc = -EFAULT;
77 }
78 return rc;
79}
#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::DMtx::Grd::wait ( sync::Cond cond,
xwtm_t  to 
)

限时等待条件量

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

在文件 DMtx.cxx81 行定义.

82{
83 xwer_t rc;
84 if (nullptr != mMtx) {
85 union xwos_ulock lock;
86 xwsq_t lkst;
87 lock.osal.mtx = mMtx->mMtxDesc.mtx;
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::DMtx::Grd::mLockMode
private

在文件 DMtx.hxx97 行定义.

◆ mMtx

DMtx* xwos::lock::DMtx::Grd::mMtx
private

在文件 DMtx.hxx95 行定义.

◆ mRc

xwer_t xwos::lock::DMtx::Grd::mRc
private

内部上锁CAPI的返回值

在文件 DMtx.hxx96 行定义.


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