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

结构体

class  xwos::lock::Seqlock
 顺序锁 更多...
 

详细描述

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

共享读

void foo()
{
xwsq_t seq = gLock.readBegin();
do {
共享读临界区
} while (gLock.readRetry(seq));
}
xwos::lock::Seqlock
xwsq_t readBegin()
开启共享读临界区
Definition Seqlock.cxx:896
bool readRetry(xwsq_t start)
关闭共享读临界区,并检查是否需要重试
Definition Seqlock.cxx:901
unsigned long xwsq_t
Definition type.h:445

顺序锁的RAII机制守卫

顺序锁不同的锁模式具有不同的RAII机制守卫:

Seqlock::RdexLkGrd : 独占读普通上锁模式

void foo()
{
{ // 构造 `grd` 时会自动对顺序锁上锁
进入临界区
} // grd析构时会自动解锁顺序锁
}
独占读普通上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:485

Seqlock::TryRdexLkGrd : 独占读普通尝试上锁模式

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

Seqlock::RdexLkThGrd : 独占读CPU中断上锁模式

void foo()
{
{ // 构造 `grd` 时进入临界区
进入临界区
} // 析构 `grd` 时退出临界区
}
独占读CPU中断上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:642

Seqlock::TryRdexLkThGrd : 独占读CPU中断尝试上锁模式

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

Seqlock::RdexLkBhGrd : 独占读中断底半部上锁模式

void foo()
{
{ // 构造 `grd` 时进入临界区
进入临界区
} // 析构 `grd` 时退出临界区
}
独占读中断底半部上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:801

Seqlock::TryRdexLkBhGrd : 独占读中断底半部尝试上锁模式

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

Seqlock::RdexLkIrqsGrd : 独占读部分中断上锁模式

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

Seqlock::TryRdexLkIrqsGrd : 独占读部分中断尝试上锁模式

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

Seqlock::WrLkGrd : 独占写普通上锁模式

void foo()
{
{ // 构造 `grd` 时会自动对顺序锁上锁
进入临界区
} // grd析构时会自动解锁顺序锁
}
独占写普通上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1123

Seqlock::TryWrLkGrd : 独占写普通尝试上锁模式

void foo()
{
{ // 构造 `grd` 时尝试进入临界区
if (XWOK == grd.getRc()) {
// 上锁成功,进入临界区
} else {
// 上锁失败
}
} // 如果上锁成功,析构 `grd` 时退出临界区
}
独占写普通尝试上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1239

Seqlock::WrLkThGrd : 独占写CPU中断上锁模式

void foo()
{
{ // 构造 `grd` 时进入临界区
进入临界区
} // 析构 `grd` 时退出临界区
}
独占写CPU中断上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1281

Seqlock::TryWrLkThGrd : 独占写CPU中断尝试上锁模式

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

Seqlock::WrLkBhGrd : 独占写中断底半部上锁模式

void foo()
{
{ // 构造 `grd` 时进入临界区
进入临界区
} // 析构 `grd` 时退出临界区
}
独占写中断底半部上锁模式下的顺序锁RAII机制守卫
Definition Seqlock.hxx:1440

Seqlock::TryWrLkBhGrd : 独占写中断底半部尝试上锁模式

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

Seqlock::WrLkIrqsGrd : 独占写部分中断上锁模式

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

Seqlock::TryWrLkIrqsGrd : 独占写部分中断尝试上锁模式

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

C++ API

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