XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
xwos::lock::Seqlock::RdexLkBhGrd类 参考

独占读中断底半部上锁模式下的顺序锁RAII机制守卫 更多...

#include <Seqlock.hxx>

类 xwos::lock::Seqlock::RdexLkBhGrd 继承关系图:
xwos::lock::Seqlock::RdexLkBhGrd 的协作图:

Public 成员函数

 RdexLkBhGrd (Seqlock *seqlock)
 构造顺序锁的RAII机制守卫
 
 RdexLkBhGrd (Seqlock &seqlock)
 构造顺序锁的RAII机制守卫
 
 ~RdexLkBhGrd ()
 析构顺序锁的RAII机制守卫
 
enum LockStatus getStatus ()
 获取锁状态
 
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)
 限时等待条件量
 

Protected 成员函数

 RdexLkBhGrd ()
 

Protected 属性

SeqlockmSeqlock
 
enum LockStatus mStatus
 

详细描述

独占读中断底半部上锁模式下的顺序锁RAII机制守卫

  • 构造函数关闭当前CPU调度器的抢占,关闭本地CPU的中断底半部,然后上锁顺序锁。 上锁失败会自旋等待,直到上锁成功为止。
  • 析构函数解锁顺序锁,开启本地CPU的中断底半部,开启当前CPU调度器的抢占。
    注解
  • 上下文:线程、中断底半部

在文件 Seqlock.hxx800 行定义.

构造及析构函数说明

◆ RdexLkBhGrd() [1/3]

xwos::lock::Seqlock::RdexLkBhGrd::RdexLkBhGrd ( Seqlock seqlock)

构造顺序锁的RAII机制守卫

参数
[in]seqlock顺序锁对象指针

在文件 Seqlock.cxx227 行定义.

228 : mSeqlock(seqlock)
230{
231 if (nullptr != mSeqlock) {
234 }
235}
struct xwos_sqlk mLock
Definition Seqlock.hxx:1753
static void xwos_sqlk_rdex_lock_bh(struct xwos_sqlk *sql)
XWOS API:开启独占读临界区,关闭本地CPU的中断底半部
Definition seqlock.h:447
函数调用图:

◆ RdexLkBhGrd() [2/3]

xwos::lock::Seqlock::RdexLkBhGrd::RdexLkBhGrd ( Seqlock seqlock)

构造顺序锁的RAII机制守卫

参数
[in]seqlock顺序锁对象引用

在文件 Seqlock.cxx237 行定义.

函数调用图:

◆ ~RdexLkBhGrd()

xwos::lock::Seqlock::RdexLkBhGrd::~RdexLkBhGrd ( )

析构顺序锁的RAII机制守卫

在文件 Seqlock.cxx247 行定义.

248{
249 if (nullptr != mSeqlock) {
253 }
254 }
255}
static void xwos_sqlk_rdex_unlock_bh(struct xwos_sqlk *sql)
XWOS API:关闭独占读临界区,开启本地CPU的中断底半部
Definition seqlock.h:477
函数调用图:

◆ RdexLkBhGrd() [3/3]

xwos::lock::Seqlock::RdexLkBhGrd::RdexLkBhGrd ( )
inlineprotected

在文件 Seqlock.hxx902 行定义.

902: mSeqlock(nullptr), mStatus(SeqlockUnlocked) {}

成员函数说明

◆ getStatus()

enum LockStatus xwos::lock::Seqlock::RdexLkBhGrd::getStatus ( )
inline

获取锁状态

在文件 Seqlock.hxx827 行定义.

827{ return mStatus; }

◆ wait() [1/4]

xwer_t xwos::lock::Seqlock::RdexLkBhGrd::wait ( sync::Cond cond)
inline

等待条件量

参数
[in]cond条件量对象的引用
返回
错误码
注解
  • 上下文:线程

在文件 Seqlock.hxx861 行定义.

861{ return wait(&cond); }
xwer_t wait(sync::Cond *cond)
等待条件量
Definition Seqlock.cxx:257
函数调用图:
这是这个函数的调用关系图:

◆ wait() [2/4]

xwer_t xwos::lock::Seqlock::RdexLkBhGrd::wait ( sync::Cond cond,
xwtm_t  to 
)
inline

限时等待条件量

参数
[in]cond条件量对象的引用
[in]to期望唤醒的时间点
返回
错误码
注解
  • 上下文:线程

在文件 Seqlock.hxx899 行定义.

899{ return wait(&cond, to); }
函数调用图:
这是这个函数的调用关系图:

◆ wait() [3/4]

xwer_t xwos::lock::Seqlock::RdexLkBhGrd::wait ( sync::Cond cond)

等待条件量

参数
[in]cond条件量对象的指针
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EINVAL参数无效
-EINTR等待被中断
-ENOTTHDCTX不在线程上下文中
注解
  • 上下文:线程
  • 调用此C++API的线程会阻塞等待条件量,等待的同时会解锁顺序锁。
  • 条件量被单播 sync::Cond::unicast() 或广播 sync::Cond::broadcast() 时,会唤醒正在等待的线程。
  • 线程被唤醒后,会重新用之前的上锁方式上锁顺序锁。
  • 重新上锁成功后将返回 XWOK
  • 线程的等待被中断后,此C++API返回 -EINTR
  • 如果此C++API返回 XWOK 的错误码后,应该 使用 getStatus() 确认是否上锁成功。

在文件 Seqlock.cxx257 行定义.

258{
259 xwer_t rc;
260 if (nullptr != mSeqlock) {
262 union xwos_ulock lock;
263 xwsq_t lkst;
264 lock.osal.sqlk = &mSeqlock->mLock;
265 rc = xwos_cond_wait(cond->getXwosObj(), lock, XWOS_LK_SQLK_RDEX, nullptr,
266 &lkst);
267 if (rc < 0) {
268 if (XWOS_LKST_UNLOCKED == lkst) {
270 }
271 }
272 } else {
273 rc = -ENOLCK;
274 }
275 } else {
276 rc = -EFAULT;
277 }
278 return rc;
279}
#define EFAULT
Bad address
Definition errno.h:44
#define ENOLCK
No lock
Definition errno.h:76
signed long xwer_t
Definition type.h:554
unsigned long xwsq_t
Definition type.h:445
@ XWOS_LKST_UNLOCKED
Definition type.h:661
@ XWOS_LK_SQLK_RDEX
Definition type.h:644
static void xwos_sqlk_rdex_lock(struct xwos_sqlk *sql)
XWOS API:开启独占读临界区
Definition seqlock.h:189
static xwer_t xwos_cond_wait(struct xwos_cond *cond, union xwos_ulock lock, xwsq_t lktype, void *lkdata, xwsq_t *lkst)
XWOS API:等待条件量
Definition cond.h:432
所有锁的联合
Definition type.h:680
union xwos_ulock::@8 osal
struct xwmp_sqlk * sqlk
Definition type.h:684
函数调用图:

◆ wait() [4/4]

xwer_t xwos::lock::Seqlock::RdexLkBhGrd::wait ( sync::Cond cond,
xwtm_t  to 
)

限时等待条件量

参数
[in]cond条件量对象的指针
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EINVAL参数无效
-ETIMEDOUT超时
-EINTR等待被中断
-ENOTTHDCTX不在线程上下文中
注解
  • 上下文:线程
  • 调用此C++API的线程会限时阻塞等待条件量,等待的同时会解锁顺序锁。
  • 条件量被单播 sync::Cond::unicast() 或广播 sync::Cond::broadcast() 时,会唤醒正在等待的线程。
  • 线程被唤醒后,会重新用之前的上锁方式上锁顺序锁 。
  • 重新上锁成功后将返回 XWOK
  • 线程的等待被中断后,此C++API返回 -EINTR
  • 线程的等待超时后,此C++API返回 -ETIMEDOUT
  • 如果此C++API返回 XWOK 的错误码,应该 使用 getStatus() 确认是否上锁成功。

在文件 Seqlock.cxx281 行定义.

282{
283 xwer_t rc;
284 if (nullptr != mSeqlock) {
286 union xwos_ulock lock;
287 xwsq_t lkst;
288 lock.osal.sqlk = &mSeqlock->mLock;
289 rc = xwos_cond_wait_to(cond->getXwosObj(), lock, XWOS_LK_SQLK_RDEX, nullptr,
290 to, &lkst);
291 if (rc < 0) {
292 if (XWOS_LKST_UNLOCKED == lkst) {
294 }
295 }
296 } else {
297 rc = -ENOLCK;
298 }
299 } else {
300 rc = -EFAULT;
301 }
302 return rc;
303}
static xwer_t xwos_cond_wait_to(struct xwos_cond *cond, union xwos_ulock lock, xwsq_t lktype, void *lkdata, xwtm_t to, xwsq_t *lkst)
XWOS API:限时等待条件量
Definition cond.h:492
函数调用图:

结构体成员变量说明

◆ mSeqlock

Seqlock* xwos::lock::Seqlock::RdexLkBhGrd::mSeqlock
protected

在文件 Seqlock.hxx803 行定义.

◆ mStatus

enum LockStatus xwos::lock::Seqlock::RdexLkBhGrd::mStatus
protected

在文件 Seqlock.hxx804 行定义.


该类的文档由以下文件生成: