|
XWOS API
4.0
XWOS C/C++ API参考手册
|
互斥锁的RAII机制守卫 更多...
#include <Mtx.hxx>

Public 成员函数 | |
| Grd ()=delete | |
| Grd (Mtx *mtx, enum LockMode mode=LockMode::MtxLock, xwtm_t to=((xwtm_t)((~(xwu64_t) 0) > > 1))) | |
| 构造互斥锁的RAII机制守卫并上锁互斥锁 | |
| Grd (Mtx &mtx, enum LockMode mode=LockMode::MtxLock, xwtm_t to=((xwtm_t)((~(xwu64_t) 0) > > 1))) | |
| 构造互斥锁的RAII机制守卫并上锁互斥锁 | |
| ~Grd () | |
| 析构互斥锁的RAII机制守卫并解锁互斥锁 | |
| void | unlock () |
| 解锁互斥锁 | |
| 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 属性 | |
| Mtx * | mMtx |
| xwer_t | mRc |
| enum LockMode | mLockMode |
|
delete |
| xwos::lock::Mtx::Grd::Grd | ( | Mtx * | mtx, |
| enum LockMode | mode = LockMode::MtxLock, |
||
| xwtm_t | to = ((xwtm_t)((~(xwu64_t) 0) > > 1)) |
||
| ) |
构造互斥锁的RAII机制守卫并上锁互斥锁
| [in] | mtx | 互斥锁对象指针 |
| [in] | mode | 锁模式,取值 Mtx::LockMode |
| [in] | to | 期望唤醒的时间点, 仅当 mode == Mtx::LockMode::MtxLockTimed 时有效。 |
Mtx::LockMode::MtxunLock 未上锁。Mtx::LockMode::MtxLock 如果无法上锁,调用线程会阻塞等待上锁。Mtx::LockMode::MtxLockTimed 定时等待模式,如果无法上锁, 调用线程会定时阻塞等待上锁。Mtx::LockMode::MtxLockUninterruptable 不可中断等待模式, 如果无法上锁,调用线程会阻塞等待上锁,且不可被中断。Mtx::LockMode::MtxLockTry 尝试上锁模式,如果无法上锁, 调用线程不会阻塞等待,尝试失败立即返回。Mtx::Grd 的对象。 Mtx::Grd 是 互斥锁的RAII机制守卫。Mtx::Grd 内部的 mRc == XWOK ), Mtx::Grd 对象析构时会自动解锁互斥锁。Mtx::Grd 内部的 mRc , 可通过 Mtx::Grd::getRc() 获取。 此时 Mtx::Grd 析构时不会解锁互斥锁。mode 为 Mtx::LockMode::MtxLock 或 Mtx::LockMode::MtxLockTimed ,等待被中断时, mRc == -EINTR 。mode 为 Mtx::LockMode::MtxLockTimed ,等待超时时, mRc == -ETIMEDOUT 。mode 为 Mtx::LockMode::MtxLockTry ,上锁失败时, mRc == -EWOULDBLOCK 。 | xwos::lock::Mtx::Grd::Grd | ( | Mtx & | mtx, |
| enum LockMode | mode = LockMode::MtxLock, |
||
| xwtm_t | to = ((xwtm_t)((~(xwu64_t) 0) > > 1)) |
||
| ) |
构造互斥锁的RAII机制守卫并上锁互斥锁
| [in] | mode | 锁模式,取值 Mtx::LockMode |
| [in] | to | 期望唤醒的时间点, 仅当 mode == Mtx::LockMode::MtxLockTimed 时有效。 |
| xwos::lock::Mtx::Grd::~Grd | ( | ) |
析构互斥锁的RAII机制守卫并解锁互斥锁
| void xwos::lock::Mtx::Grd::unlock | ( | ) |
解锁互斥锁
|
inline |
获取上锁结果错误码
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
| -EOBJDEAD | 互斥锁对象无效 |
| -EINTR | 等待被中断 |
| -ETIMEDOUT | 超时 |
| -ENOTTHDCTX | 不在线程上下文中 |
| -EDSPMPT | 抢占被关闭 |
| -EDSBH | 中断底半部被关闭 |
|
inline |
获取上锁模式
| xwer_t xwos::lock::Mtx::Grd::wait | ( | sync::Cond * | cond | ) |
等待条件量
| [in] | cond | 条件量对象的指针 |
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
| -EINVAL | 参数无效 |
| -ENOTTHDCTX | 不在线程上下文中 |
| -ENOLCK | 未上锁 |
| -EINTR | 等待被中断 |
Mtx::Grd 时使用的模式是 Mtx::LockMode::MtxLockUninterruptable ,那么等待模式也是不可中断的。sync::Cond::unicast() 或广播 sync::Cond::broadcast() 时,会唤醒正在等待的线程。Mtx::Grd 时使用的模式是 Mtx::LockMode::MtxLockUninterruptable ,那么重新上锁的模式 也是 Mtx::LockMode::MtxLockUninterruptable 。XWOK 。-EINTR 。XWOK 的错误码,应该 使用 Mtx::Grd::getLockMode() 确认是否上锁成功。
|
inline |
这是为便于使用而提供的一个重载成员函数.与上面的函数相比,它接受不同类型的参数.


| xwer_t xwos::lock::Mtx::Grd::wait | ( | sync::Cond * | cond, |
| xwtm_t | to | ||
| ) |
限时等待条件量
| [in] | cond | 条件量对象的指针 |
| [in] | to | 期望唤醒的时间点 |
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
| -EINVAL | 参数无效 |
| -ENOTTHDCTX | 不在线程上下文中 |
| -ENOLCK | 未上锁 |
| -EINTR | 等待被中断 |
| -ETIMEDOUT | 超时 |
Mtx::Grd 时使用的模式是 Mtx::LockMode::MtxLockUninterruptable ,那么等待模式也是不可中断的, 此时参数 to 无效,等待将不会超时。sync::Cond::unicast() 或广播 sync::Cond::broadcast() 时,会唤醒正在等待的线程。Mtx::Grd 时使用的模式是 Mtx::LockMode::MtxLockUninterruptable ,那么重新上锁的模式 也是 Mtx::LockMode::MtxLockUninterruptable 。Mtx::Grd 时使用的模式 不是 Mtx::LockMode::MtxLockUninterruptable ,线程被唤醒时,若互斥锁被 其他线程占用,线程也最多等待互斥锁到时间点 to 。XWOK 。-EINTR 。-ETIMEDOUT 。XWOK 的错误码,应该 使用 Mtx::Grd::getLockMode() 确认是否上锁成功。
|
inline |