XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
xwos::lock::Seqlock::TryRdexLkIrqsGrd< TIrqList > 模板类 参考

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

#include <Seqlock.hxx>

类 xwos::lock::Seqlock::TryRdexLkIrqsGrd< TIrqList > 继承关系图:
xwos::lock::Seqlock::TryRdexLkIrqsGrd< TIrqList > 的协作图:

Public 成员函数

 TryRdexLkIrqsGrd (Seqlock *seqlock)
 构造顺序锁的RAII机制守卫
 
 TryRdexLkIrqsGrd (Seqlock &seqlock)
 构造顺序锁的RAII机制守卫
 
 ~TryRdexLkIrqsGrd ()
 析构顺序锁的RAII机制守卫
 
xwer_t getRc ()
 获取上锁结果错误码
 
- Public 成员函数 继承自 xwos::lock::Seqlock::RdexLkIrqsGrd< TIrqList ... >
 RdexLkIrqsGrd (Seqlock *seqlock)
 构造顺序锁的RAII机制守卫
 
 RdexLkIrqsGrd (Seqlock &seqlock)
 构造顺序锁的RAII机制守卫
 
 ~RdexLkIrqsGrd ()
 析构顺序锁的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)
 限时等待条件量
 

Private 属性

xwer_t mRc
 

额外继承的成员函数

- Protected 成员函数 继承自 xwos::lock::Seqlock::RdexLkIrqsGrd< TIrqList ... >
 RdexLkIrqsGrd ()
 
- Protected 属性 继承自 xwos::lock::Seqlock::RdexLkIrqsGrd< TIrqList ... >
SeqlockmSeqlock
 
enum LockStatus mStatus
 
xwirq_t mIrqs [sizeof...(TIrqList)]
 
xwreg_t mIrqFlags [sizeof...(TIrqList)]
 

详细描述

template<xwirq_t ... TIrqList>
class xwos::lock::Seqlock::TryRdexLkIrqsGrd< TIrqList >

独占读部分中断尝试上锁模式下的顺序锁RAII机制守卫

  • 构造函数关闭并保存 TIrqList 列表内的中断,关闭当前CPU调度器的抢占,上锁顺序锁。 上锁失败不会自旋等待,会开启当前CPU调度器的抢占, 用保存的中断标志恢复 TIrqList 列表内的中断, 并在 mRc 中返回 -EAGAIN
  • 析构函数解锁顺序锁,开启当前CPU调度器的抢占, 用保存的中断标志恢复 TIrqList 列表内的中断。
    注解
  • 上下文:线程、TIrqList 列表中的中断

在文件 Seqlock.hxx1080 行定义.

构造及析构函数说明

◆ TryRdexLkIrqsGrd() [1/2]

template<xwirq_t ... TIrqList>
xwos::lock::Seqlock::TryRdexLkIrqsGrd< TIrqList >::TryRdexLkIrqsGrd ( Seqlock seqlock)

构造顺序锁的RAII机制守卫

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

在文件 Seqlock.cxx421 行定义.

422 : RdexLkIrqsGrd<TIrqList ...>()
423{
424 RdexLkIrqsGrd<TIrqList ...>::mSeqlock = seqlock;
425 if (nullptr != RdexLkIrqsGrd<TIrqList ...>::mSeqlock) {
426 mRc = xwos_sqlk_rdex_trylock_irqssv(&RdexLkIrqsGrd<TIrqList ...>::mSeqlock->mLock,
427 RdexLkIrqsGrd<TIrqList ...>::mIrqs,
428 RdexLkIrqsGrd<TIrqList ...>::mIrqFlags,
429 sizeof...(TIrqList));
430 if (XWOK != mRc) {
431 RdexLkIrqsGrd<TIrqList ...>::mSeqlock = nullptr;
432 }
433 }
434}
struct xwos_sqlk mLock
Definition Seqlock.hxx:1753
#define XWOK
No error
Definition errno.h:182
static xwer_t xwos_sqlk_rdex_trylock_irqssv(struct xwos_sqlk *sql, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:尝试开启独占读临界区,保存部分中断的中断标志并关闭
Definition seqlock.h:412
函数调用图:

◆ TryRdexLkIrqsGrd() [2/2]

template<xwirq_t ... TIrqList>
xwos::lock::Seqlock::TryRdexLkIrqsGrd< TIrqList >::TryRdexLkIrqsGrd ( Seqlock seqlock)

构造顺序锁的RAII机制守卫

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

在文件 Seqlock.cxx437 行定义.

438 : RdexLkIrqsGrd<TIrqList ...>()
439{
440 RdexLkIrqsGrd<TIrqList ...>::mSeqlock = seqlock;
441 if (nullptr != RdexLkIrqsGrd<TIrqList ...>::mSeqlock) {
442 mRc = xwos_sqlk_rdex_trylock_irqssv(&RdexLkIrqsGrd<TIrqList ...>::mSeqlock->mLock,
443 RdexLkIrqsGrd<TIrqList ...>::mIrqs,
444 RdexLkIrqsGrd<TIrqList ...>::mIrqFlags,
445 sizeof...(TIrqList));
446 if (XWOK != mRc) {
447 RdexLkIrqsGrd<TIrqList ...>::mSeqlock = nullptr;
448 }
449 }
450}
函数调用图:

◆ ~TryRdexLkIrqsGrd()

template<xwirq_t ... TIrqList>
xwos::lock::Seqlock::TryRdexLkIrqsGrd< TIrqList >::~TryRdexLkIrqsGrd ( )
inline

析构顺序锁的RAII机制守卫

在文件 Seqlock.hxx1102 行定义.

1102{}

成员函数说明

◆ getRc()

template<xwirq_t ... TIrqList>
xwer_t xwos::lock::Seqlock::TryRdexLkIrqsGrd< TIrqList >::getRc ( )
inline

获取上锁结果错误码

返回
错误码
返回值
XWOK没有错误
-EAGAIN获得顺序锁失败

在文件 Seqlock.hxx1110 行定义.

1110{ return mRc; }

结构体成员变量说明

◆ mRc

template<xwirq_t ... TIrqList>
xwer_t xwos::lock::Seqlock::TryRdexLkIrqsGrd< TIrqList >::mRc
private

尝试上锁的结果

在文件 Seqlock.hxx1084 行定义.


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