XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
自旋锁 的协作图:

结构体

class  xwos::lock::Spinlock
 自旋锁 更多...
 

详细描述

自旋锁的结构体非常小,因此不分别提供静态初始化与动态创建的方法。

自旋锁的RAII机制守卫

自旋锁不同的锁模式具有不同的RAII机制守卫:

Spinlock::LkGrd : 普通上锁模式

void foo()
{
{ // 构造 `grd` 时会自动对自旋锁上锁
进入临界区
} // grd析构时会自动解锁自旋锁
}
xwos::lock::Spinlock
普通上锁模式下的自旋锁RAII机制守卫
Definition Spinlock.hxx:265

Spinlock::TryLkGrd : 普通尝试上锁模式

void foo()
{
{ // 构造 `grd` 时尝试进入临界区
if (XWOK == grd.getRc()) {
// 上锁成功,进入临界区
} else {
// 上锁失败
}
} // 如果上锁成功,析构 `grd` 时退出临界区
}
普通尝试上锁模式下的自旋锁RAII机制守卫
Definition Spinlock.hxx:381
#define XWOK
No error
Definition errno.h:182

Spinlock::LkThGrd : CPU中断上锁模式

void foo()
{
{ // 构造 `grd` 时进入临界区
进入临界区
} // 析构 `grd` 时退出临界区
}
CPU中断上锁模式下的自旋锁RAII机制守卫
Definition Spinlock.hxx:423

Spinlock::TryLkThGrd : CPU中断尝试上锁模式

void foo()
{
{ // 构造 `grd` 时尝试进入临界区
if (XWOK == grd.getRc()) {
// 上锁成功,进入临界区
} else {
// 上锁失败
}
} // 如果上锁成功,析构 `grd` 时退出临界区
}
CPU中断尝试上锁模式下的自旋锁RAII机制守卫
Definition Spinlock.hxx:541

Spinlock::LkBhGrd : 中断底半部上锁模式

void foo()
{
{ // 构造 `grd` 时进入临界区
进入临界区
} // 析构 `grd` 时退出临界区
}
中断底半部上锁模式下的自旋锁RAII机制守卫
Definition Spinlock.hxx:582

Spinlock::TryLkBhGrd : 中断底半部尝试上锁模式

void foo()
{
{ // 构造 `grd` 时尝试进入临界区
if (XWOK == grd.getRc()) {
// 上锁成功,进入临界区
} else {
// 上锁失败
}
} // 如果上锁成功,析构 `grd` 时退出临界区
}

Spinlock::LkIrqsGrd : 部分中断上锁模式

void foo()
{
{ // 构造 `grd` 时进入临界区,同时关闭编号为1, 3, 5, 8的四个中断。
进入临界区
} // 析构 `grd` 时退出临界区,并恢复编号为1, 3, 5, 8的四个中断。
}
部分中断上锁模式的自旋锁RAII机制守卫
Definition Spinlock.hxx:743

Spinlock::TryLkIrqsGrd : 部分中断尝试上锁模式

void foo()
{
{ // 构造 `grd` 时尝试进入临界区,同时关闭编号为1, 3, 5, 8的四个中断。
if (XWOK == grd.getRc()) {
// 上锁成功,进入临界区
} else {
// 上锁失败
}
} // 如果上锁成功,析构 `grd` 时退出临界区,并恢复编号为1, 3, 5, 8的四个中断。
}
部分中断尝试上锁模式下的自旋锁RAII机制守卫
Definition Spinlock.hxx:865

C++ API

头文件: xwos/cxx/lock/Spinlock.hxx