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