|
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() 确认是否上锁成功。 