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

中断底半部上锁模式下的自旋锁RAII机制守卫 更多...

#include <Spinlock.hxx>

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

Public 成员函数

 LkBhGrd (Spinlock *spinlock)
 构造自旋锁的RAII机制守卫
 
 LkBhGrd (Spinlock &spinlock)
 构造自旋锁的RAII机制守卫
 
 ~LkBhGrd ()
 析构自旋锁的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)
 限时等待条件量
 

Protected 成员函数

 LkBhGrd ()
 

Protected 属性

SpinlockmSpinlock
 
enum LockStatus mStatus
 

详细描述

中断底半部上锁模式下的自旋锁RAII机制守卫

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

在文件 Spinlock.hxx613 行定义.

构造及析构函数说明

◆ LkBhGrd() [1/3]

xwos::lock::Spinlock::LkBhGrd::LkBhGrd ( Spinlock spinlock)

构造自旋锁的RAII机制守卫

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

◆ LkBhGrd() [2/3]

xwos::lock::Spinlock::LkBhGrd::LkBhGrd ( Spinlock spinlock)

构造自旋锁的RAII机制守卫

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

◆ ~LkBhGrd()

xwos::lock::Spinlock::LkBhGrd::~LkBhGrd ( )

析构自旋锁的RAII机制守卫

◆ LkBhGrd() [3/3]

xwos::lock::Spinlock::LkBhGrd::LkBhGrd ( )
inlineprotected

在文件 Spinlock.hxx722 行定义.

723 : mSpinlock(nullptr)
725 {
726 }

成员函数说明

◆ unlock()

void xwos::lock::Spinlock::LkBhGrd::unlock ( )

解锁自旋锁

  • 主动解锁后,析构函数将不再解锁。

◆ getStatus()

enum LockStatus xwos::lock::Spinlock::LkBhGrd::getStatus ( )
inline

获取锁状态

在文件 Spinlock.hxx647 行定义.

647{ return mStatus; }

◆ wait() [1/4]

xwer_t xwos::lock::Spinlock::LkBhGrd::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() 确认是否上锁成功。

◆ wait() [2/4]

xwer_t xwos::lock::Spinlock::LkBhGrd::wait ( sync::Cond cond)
inline

等待条件量

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

在文件 Spinlock.hxx681 行定义.

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

◆ wait() [3/4]

xwer_t xwos::lock::Spinlock::LkBhGrd::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() 确认是否上锁成功。

◆ wait() [4/4]

xwer_t xwos::lock::Spinlock::LkBhGrd::wait ( sync::Cond cond,
xwtm_t  to 
)
inline

限时等待条件量

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

在文件 Spinlock.hxx719 行定义.

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

结构体成员变量说明

◆ mSpinlock

Spinlock* xwos::lock::Spinlock::LkBhGrd::mSpinlock
protected

在文件 Spinlock.hxx616 行定义.

◆ mStatus

enum LockStatus xwos::lock::Spinlock::LkBhGrd::mStatus
protected

在文件 Spinlock.hxx617 行定义.


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