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

部分中断尝试上锁模式下的自旋锁RAII机制守卫 更多...

#include <Spinlock.hxx>

类 xwos::lock::Spinlock::TryLkIrqsGrd< TIrqList > 继承关系图:
xwos::lock::Spinlock::TryLkIrqsGrd< TIrqList > 的协作图:

Public 成员函数

 TryLkIrqsGrd (Spinlock *spinlock)
 构造自旋锁的RAII机制守卫
 
 TryLkIrqsGrd (Spinlock &spinlock)
 构造自旋锁的RAII机制守卫
 
 ~TryLkIrqsGrd ()
 析构自旋锁的RAII机制守卫
 
xwer_t getRc ()
 获取上锁结果错误码
 
- Public 成员函数 继承自 xwos::lock::Spinlock::LkIrqsGrd< TIrqList... >
 LkIrqsGrd (Spinlock *spinlock)
 构造自旋锁的RAII机制守卫
 
 LkIrqsGrd (Spinlock &spinlock)
 构造自旋锁的RAII机制守卫
 
 ~LkIrqsGrd ()
 析构自旋锁的RAII机制守卫
 
void unlock ()
 解锁自旋锁
 
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::Spinlock::LkIrqsGrd< TIrqList... >
 LkIrqsGrd ()
 
- Protected 属性 继承自 xwos::lock::Spinlock::LkIrqsGrd< TIrqList... >
SpinlockmSpinlock
 
enum LockStatus mStatus
 
xwirq_t mIrqs [sizeof...(TIrqList)]
 
xwreg_t mIrqFlags [sizeof...(TIrqList)]
 

详细描述

template<xwirq_t... TIrqList>
class xwos::lock::Spinlock::TryLkIrqsGrd< TIrqList >

部分中断尝试上锁模式下的自旋锁RAII机制守卫

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

在文件 Spinlock.hxx998 行定义.

构造及析构函数说明

◆ TryLkIrqsGrd() [1/2]

template<xwirq_t... TIrqList>
xwos::lock::Spinlock::TryLkIrqsGrd< TIrqList >::TryLkIrqsGrd ( Spinlock spinlock)
inline

构造自旋锁的RAII机制守卫

参数
[in]spinlock自旋锁对象指针

<No error

在文件 Spinlock.hxx1008 行定义.

1009 : LkIrqsGrd<TIrqList...>()
1010 {
1011 LkIrqsGrd<TIrqList...>::mSpinlock = spinlock;
1012 if (nullptr != LkIrqsGrd<TIrqList...>::mSpinlock) {
1014 &LkIrqsGrd<TIrqList...>::mSpinlock->mLock,
1015 LkIrqsGrd<TIrqList...>::mIrqs, LkIrqsGrd<TIrqList...>::mIrqFlags,
1016 sizeof...(TIrqList));
1017 if (XWOK != mRc) {
1018 LkIrqsGrd<TIrqList...>::mSpinlock = nullptr;
1019 } else {
1020 LkIrqsGrd<TIrqList...>::mStatus =
1022 }
1023 }
1024 }
struct xwos_splk mLock
#define XWOK
No error
Definition errno.h:182
static xwer_t xwos_splk_trylock_irqssv(struct xwos_splk *spl, const xwirq_t irqs[], xwreg_t flags[], xwsz_t num)
XWOS API:尝试上锁自旋锁,保存部分中断的中断标志并关闭
Definition spinlock.h:324
函数调用图:

◆ TryLkIrqsGrd() [2/2]

template<xwirq_t... TIrqList>
xwos::lock::Spinlock::TryLkIrqsGrd< TIrqList >::TryLkIrqsGrd ( Spinlock spinlock)
inline

构造自旋锁的RAII机制守卫

参数
[in]spinlock自旋锁对象引用

<No error

在文件 Spinlock.hxx1030 行定义.

1031 : LkIrqsGrd<TIrqList...>()
1032 {
1033 LkIrqsGrd<TIrqList...>::mSpinlock = spinlock;
1034 if (nullptr != LkIrqsGrd<TIrqList...>::mSpinlock) {
1036 &LkIrqsGrd<TIrqList...>::mSpinlock->mLock,
1037 LkIrqsGrd<TIrqList...>::mIrqs, LkIrqsGrd<TIrqList...>::mIrqFlags,
1038 sizeof...(TIrqList));
1039 if (XWOK != mRc) {
1040 LkIrqsGrd<TIrqList...>::mSpinlock = nullptr;
1041 } else {
1042 LkIrqsGrd<TIrqList...>::mStatus =
1044 }
1045 }
1046 }
函数调用图:

◆ ~TryLkIrqsGrd()

template<xwirq_t... TIrqList>
xwos::lock::Spinlock::TryLkIrqsGrd< TIrqList >::~TryLkIrqsGrd ( )
inline

析构自旋锁的RAII机制守卫

在文件 Spinlock.hxx1051 行定义.

1051{}

成员函数说明

◆ getRc()

template<xwirq_t... TIrqList>
xwer_t xwos::lock::Spinlock::TryLkIrqsGrd< TIrqList >::getRc ( )
inline

获取上锁结果错误码

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

在文件 Spinlock.hxx1059 行定义.

1059{ return mRc; }

结构体成员变量说明

◆ mRc

template<xwirq_t... TIrqList>
xwer_t xwos::lock::Spinlock::TryLkIrqsGrd< TIrqList >::mRc
private

尝试上锁的结果

在文件 Spinlock.hxx1001 行定义.


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