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()
开启共享读临界区
bool readRetry(xwsq_t start)
关闭共享读临界区,并检查是否需要重试
unsigned long xwsq_t
Definition type.h:445

顺序锁的RAII机制守卫

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

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

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

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

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

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

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

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

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

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

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

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:1016

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

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

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

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

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

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

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

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

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

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

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

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

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:1811

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

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

等待条件量并解锁

头文件

xwos/cxx/lock/Seqlock.hxx