XWOS API
4.0
XWOS C/C++ API参考手册
|
动态互斥锁的RAII机制守卫 更多...
#include <DMtx.hxx>
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 属性 | |
DMtx * | mMtx |
xwer_t | mRc |
enum LockMode | mLockMode |
|
delete |
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::LockMode::DMtxunLock
未上锁。DMtx::LockMode::DMtxLock
如果无法上锁,调用线程会阻塞等待上锁。DMtx::LockMode::DMtxLockTimed
定时等待模式,如果无法上锁, 调用线程会定时阻塞等待上锁。DMtx::LockMode::DMtxLockUninterruptable
不可中断等待模式, 如果无法上锁,调用线程会阻塞等待上锁,且不可被中断。DMtx::LockMode::DMtxLockTry
尝试上锁模式,如果无法上锁, 调用线程不会阻塞等待,尝试失败立即返回。DMtx::Grd
的对象。 DMtx::Grd
是 动态互斥锁的RAII机制守卫。DMtx::Grd
内部的 mRc == XWOK
), DMtx::Grd
对象析构时会自动解锁互斥锁。DMtx::Grd
内部的 mRc
, 可通过 DMtx::Grd::getRc()
获取。 此时 DMtx::Grd
析构时不会解锁互斥锁。mode
为 DMtx::LockMode::DMtxLock
或 DMtx::LockMode::DMtxLockTimed
,等待被中断时, mRc == -EINTR
。mode
为 DMtx::LockMode::DMtxLockTimed
,等待超时时, mRc == -ETIMEDOUT
。mode
为 DMtx::LockMode::DMtxLockTry
,上锁失败时, mRc == -EWOULDBLOCK
。 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 时有效。 |
xwos::lock::DMtx::Grd::~Grd | ( | ) |
析构动态互斥锁的RAII机制守卫并解锁互斥锁
|
inline |
|
inline |
等待条件量
[in] | cond | 条件量对象的引用 |
|
inline |
限时等待条件量
[in] | cond | 条件量对象的引用 |
[in] | to | 期望唤醒的时间点 |
xwer_t xwos::lock::DMtx::Grd::wait | ( | sync::Cond * | cond | ) |
等待条件量
[in] | cond | 条件量对象的指针 |
XWOK | 没有错误 |
-EFAULT | 无效的指针或空指针 |
-EINVAL | 参数无效 |
-EINTR | 等待被中断 |
-ENOTTHDCTX | 不在线程上下文中 |
DMtx::Grd
时使用的模式是 DMtx::LockMode::DMtxLockUninterruptable
,那么等待模式也是不可中断的。sync::Cond::unicast()
或广播 sync::Cond::broadcast()
时,会唤醒正在等待的线程。DMtx::Grd
时使用的模式是 DMtx::LockMode::DMtxLockUninterruptable
,那么重新上锁的模式 也是 DMtx::LockMode::DMtxLockUninterruptable
。XWOK
。-EINTR
。XWOK
的错误码,应该 使用 DMtx::Grd::getLockMode()
确认是否上锁成功。 xwer_t xwos::lock::DMtx::Grd::wait | ( | sync::Cond * | cond, |
xwtm_t | to | ||
) |
限时等待条件量
[in] | cond | 条件量对象的指针 |
[in] | to | 期望唤醒的时间点 |
XWOK | 没有错误 |
-EFAULT | 无效的指针或空指针 |
-EINVAL | 参数无效 |
-ETIMEDOUT | 超时 |
-EINTR | 等待被中断 |
-ENOTTHDCTX | 不在线程上下文中 |
DMtx::Grd
时使用的模式是 DMtx::LockMode::DMtxLockUninterruptable
,那么等待模式也是不可中断的, 此时参数 to
无效,等待将不会超时。sync::Cond::unicast()
或广播 sync::Cond::broadcast()
时,会唤醒正在等待的线程。DMtx::Grd
时使用的模式是 DMtx::LockMode::DMtxLockUninterruptable
,那么重新上锁的模式 也是 DMtx::LockMode::DMtxLockUninterruptable
。DMtx::Grd
时使用的模式 不是 DMtx::LockMode::DMtxLockUninterruptable
,线程被唤醒时,若互斥锁被 其他线程占用,线程也最多等待互斥锁到时间点 to
。XWOK
。-EINTR
。-ETIMEDOUT
。XWOK
的错误码,应该 使用 DMtx::Grd::getLockMode()
确认是否上锁成功。