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