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

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

#include <Spinlock.hxx>

类 xwos::lock::Spinlock::TryLkThGrd 继承关系图:
xwos::lock::Spinlock::TryLkThGrd 的协作图:

Public 成员函数

 TryLkThGrd (Spinlock *spinlock)
 构造自旋锁的RAII机制守卫
 
 TryLkThGrd (Spinlock &spinlock)
 构造自旋锁的RAII机制守卫
 
 ~TryLkThGrd ()
 析构自旋锁的RAII机制守卫
 
xwer_t getRc ()
 获取上锁结果错误码
 
- Public 成员函数 继承自 xwos::lock::Spinlock::LkThGrd
 LkThGrd (Spinlock *spinlock)
 构造自旋锁的RAII机制守卫
 
 LkThGrd (Spinlock &spinlock)
 构造自旋锁的RAII机制守卫
 
 ~LkThGrd ()
 析构自旋锁的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::Spinlock::LkThGrd
 LkThGrd ()
 
- Protected 属性 继承自 xwos::lock::Spinlock::LkThGrd
SpinlockmSpinlock
 
enum LockStatus mStatus
 
xwreg_t mCpuirq
 

详细描述

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

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

在文件 Spinlock.hxx539 行定义.

构造及析构函数说明

◆ TryLkThGrd() [1/2]

xwos::lock::Spinlock::TryLkThGrd::TryLkThGrd ( Spinlock spinlock)

构造自旋锁的RAII机制守卫

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

在文件 Spinlock.cxx204 行定义.

205 : LkThGrd()
206{
207 mSpinlock = spinlock;
208 if (nullptr != mSpinlock) {
210 if (XWOK != mRc) {
211 mSpinlock = nullptr;
212 } else {
214 }
215 }
216}
struct xwos_splk mLock
Definition Spinlock.hxx:897
#define XWOK
No error
Definition errno.h:182
static xwer_t xwos_splk_trylock_cpuirqsv(struct xwos_splk *spl, xwreg_t *cpuirq)
XWOS API:尝试上锁自旋锁,保存本地CPU的中断标志并关闭
Definition spinlock.h:211
函数调用图:

◆ TryLkThGrd() [2/2]

xwos::lock::Spinlock::TryLkThGrd::TryLkThGrd ( Spinlock spinlock)

构造自旋锁的RAII机制守卫

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

在文件 Spinlock.cxx218 行定义.

219 : LkThGrd()
220{
221 mSpinlock = &spinlock;
222 if (nullptr != mSpinlock) {
224 if (XWOK != mRc) {
225 mSpinlock = nullptr;
226 } else {
228 }
229 }
230}
函数调用图:

◆ ~TryLkThGrd()

xwos::lock::Spinlock::TryLkThGrd::~TryLkThGrd ( )
inline

析构自旋锁的RAII机制守卫

在文件 Spinlock.hxx561 行定义.

561{}

成员函数说明

◆ getRc()

xwer_t xwos::lock::Spinlock::TryLkThGrd::getRc ( )
inline

获取上锁结果错误码

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

在文件 Spinlock.hxx569 行定义.

569{ return mRc; }

结构体成员变量说明

◆ mRc

xwer_t xwos::lock::Spinlock::TryLkThGrd::mRc
private

尝试上锁的结果

在文件 Spinlock.hxx543 行定义.


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