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

信号量基类 更多...

#include <Sem.hxx>

类 xwos::sync::Sem 继承关系图:
xwos::sync::Sem 的协作图:

Public 类型

enum  WaitMode : xwu32_t { SemWait = 0 , SemWaitTimed , SemWaitUninterruptable , SemTryWait }
 静态信号量的等待模式 更多...
 

Public 成员函数

xwer_t post ()
 发布信号量
 
xwer_t wait (enum WaitMode mode=WaitMode::SemWait, xwtm_t to=((xwtm_t)((~(xwu64_t) 0) > > 1)))
 等待并获取信号量
 
xwer_t freeze ()
 冻结信号量
 
xwer_t thaw ()
 解冻信号量
 
xwssq_t max ()
 获取信号量计数器的最大值
 
xwssq_t value ()
 获取信号量计数器的值
 
template<xwsz_t TSelNum>
xwer_t bind (Sel< TSelNum > *sel, long pos)
 绑定信号量对象到信号选择器
 
template<xwsz_t TSelNum>
xwer_t bind (Sel< TSelNum > &sel, long pos)
 绑定信号量对象到信号选择器
 
template<xwsz_t TSelNum>
xwer_t unbind (Sel< TSelNum > *sel)
 从信号选择器上解绑信号量对象
 
template<xwsz_t TSelNum>
xwer_t unbind (Sel< TSelNum > &sel)
 从信号选择器上解绑信号量对象
 
struct xwos_semgetXwosObj ()
 获取XWOS对象指针
 

Protected 成员函数

 Sem ()
 
 ~Sem ()
 

Protected 属性

struct xwos_semmSemPtr
 

详细描述

信号量基类

在文件 Sem.hxx59 行定义.

成员枚举类型说明

◆ WaitMode

静态信号量的等待模式

枚举值
SemWait 

等待模式

SemWaitTimed 

定时等待模式

SemWaitUninterruptable 

不可中断等待模式

SemTryWait 

尝试模式(只测试不等待)

在文件 Sem.hxx65 行定义.

65 : xwu32_t {
66 SemWait = 0,
70 };
@ SemWaitUninterruptable
Definition Sem.hxx:68
uint32_t xwu32_t
Definition type.h:266

构造及析构函数说明

◆ Sem()

xwos::sync::Sem::Sem ( )
inlineprotected

在文件 Sem.hxx76 行定义.

76: mSemPtr(nullptr) {}
struct xwos_sem * mSemPtr
Definition Sem.hxx:73

◆ ~Sem()

xwos::sync::Sem::~Sem ( )
inlineprotected

在文件 Sem.hxx77 行定义.

77{ mSemPtr = nullptr; }

成员函数说明

◆ post()

xwer_t xwos::sync::Sem::post ( )
inline

发布信号量

返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ENEGATIVE信号量对象已被冻结
-ERANGE信号量对象的值已经最大
注解
  • 上下文:任意
  • 此C++API只对未冻结的信号量对象起作用,对已冻结的信号量对象调用此C++API将 返回错误码 -ENEGATIVE

在文件 Sem.hxx93 行定义.

93{ return xwos_sem_post(mSemPtr); }
static xwer_t xwos_sem_post(struct xwos_sem *sem)
XWOS API:发布信号量
Definition sem.h:373
函数调用图:

◆ wait()

xwer_t xwos::sync::Sem::wait ( enum WaitMode  mode = WaitMode::SemWait,
xwtm_t  to = ((xwtm_t)((~(xwu64_t)0) >> 1)) 
)
inline

等待并获取信号量

参数
[in]mode锁模式,取值 Sem::WaitMode
[in]to期望唤醒的时间点, 仅当 mode == Sem::WaitMode::SemWaitTimed 时有效。
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ETIMEDOUT超时
-EINTR等待被中断
-ENOTTHDCTX不在线程上下文中
-EDSPMPT抢占被关闭
-EDSBH中断底半部被关闭
注解

在文件 Sem.hxx126 行定义.

127 {
128 xwer_t rc;
129 switch (mode) {
132 break;
134 rc = xwos_sem_wait_to(mSemPtr, to);
135 break;
138 break;
141 break;
142 default:
144 break;
145 }
146 return rc;
147 }
signed long xwer_t
Definition type.h:554
static xwer_t xwos_sem_trywait(struct xwos_sem *sem)
XWOS API:尝试获取信号量
Definition sem.h:454
static xwer_t xwos_sem_wait(struct xwos_sem *sem)
XWOS API:等待并获取信号量
Definition sem.h:392
static xwer_t xwos_sem_wait_unintr(struct xwos_sem *sem)
XWOS API:等待并获取信号量,且等待不可被中断
Definition sem.h:436
static xwer_t xwos_sem_wait_to(struct xwos_sem *sem, xwtm_t to)
XWOS API:限时等待并获取信号量
Definition sem.h:418
函数调用图:

◆ freeze()

xwer_t xwos::sync::Sem::freeze ( )
inline

冻结信号量

返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-EALREADY信号量对象已被冻结
注解
  • 上下文:任意
  • 被冻结的信号量对象不允许增加(V操作),但可以被测试(P操作)。 测试信号量对象的线程会被加入到信号量对象的等待队列。
  • 对已经冻结的信号量再次冻结,将返回 -EALREADY

在文件 Sem.hxx162 行定义.

162{ return xwos_sem_freeze(mSemPtr); }
static xwer_t xwos_sem_freeze(struct xwos_sem *sem)
XWOS API:冻结信号量对象
Definition sem.h:334
函数调用图:

◆ thaw()

xwer_t xwos::sync::Sem::thaw ( )
inline

解冻信号量

返回
错误码
返回值
XWOK没有错误
-EFAULT无效的指针或空指针
-EALREADY信号量对象未被冻结
注解
  • 上下文:任意
  • 此C++API只对已冻结的信号量对象起作用, 对未冻结的信号量对象调用此函数将返回错误码 -EALREADY

在文件 Sem.hxx176 行定义.

176{ return xwos_sem_thaw(mSemPtr); }
static xwer_t xwos_sem_thaw(struct xwos_sem *sem)
XWOS API:解冻信号量对象
Definition sem.h:353
函数调用图:

◆ max()

xwssq_t xwos::sync::Sem::max ( )
inline

获取信号量计数器的最大值

返回
最大值
注解
  • 上下文:任意

在文件 Sem.hxx184 行定义.

185 {
186 xwssq_t max;
188 return max;
189 }
xwssq_t max()
获取信号量计数器的最大值
Definition Sem.hxx:184
signed long xwssq_t
Definition type.h:461
static xwer_t xwos_sem_get_max(struct xwos_sem *sem, xwssq_t *max)
XWOS API:获取信号量对象计数器的最大值
Definition sem.h:470
函数调用图:
这是这个函数的调用关系图:

◆ value()

xwssq_t xwos::sync::Sem::value ( )
inline

获取信号量计数器的值

返回
最大值
注解
  • 上下文:任意

在文件 Sem.hxx197 行定义.

198 {
201 return value;
202 }
xwssq_t value()
获取信号量计数器的值
Definition Sem.hxx:197
static xwer_t xwos_sem_get_value(struct xwos_sem *sem, xwssq_t *val)
XWOS API:获取信号量对象计数器的值
Definition sem.h:486
函数调用图:
这是这个函数的调用关系图:

◆ bind() [1/2]

template<xwsz_t TSelNum>
xwer_t xwos::sync::Sem::bind ( Sel< TSelNum > *  sel,
long  pos 
)
inline

绑定信号量对象到信号选择器

参数
[in]sel信号选择器的指针
[in]pos信号量对象映射到信号选择器位图中的位置
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ECHRNG位置超出范围
-EALREADY同步对象已经绑定到事件对象
-EBUSY通道已经被其他同步对象独占
注解
  • 上下文:任意
  • 绑定方式:独占绑定

在文件 Sem.hxx219 行定义.

220 {
221 return xwos_sem_bind(mSemPtr, sel->getXwosObj(), (xwsq_t)pos);
222 }
unsigned long xwsq_t
Definition type.h:445
static xwer_t xwos_sem_bind(struct xwos_sem *sem, struct xwos_sel *sel, xwsq_t pos)
XWOS API:绑定信号量对象到信号选择器
Definition sem.h:297
函数调用图:

◆ bind() [2/2]

template<xwsz_t TSelNum>
xwer_t xwos::sync::Sem::bind ( Sel< TSelNum > &  sel,
long  pos 
)
inline

绑定信号量对象到信号选择器

参数
[in]sel信号选择器的引用
[in]pos信号量对象映射到信号选择器位图中的位置
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ECHRNG位置超出范围
-EALREADY同步对象已经绑定到事件对象
-EBUSY通道已经被其他同步对象独占
注解
  • 上下文:任意
  • 绑定方式:独占绑定

在文件 Sem.hxx239 行定义.

240 {
241 return xwos_sem_bind(mSemPtr, sel.getXwosObj(), (xwsq_t)pos);
242 }
函数调用图:

◆ unbind() [1/2]

template<xwsz_t TSelNum>
xwer_t xwos::sync::Sem::unbind ( Sel< TSelNum > *  sel)
inline

从信号选择器上解绑信号量对象

参数
[in]sel信号选择器的引用
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ENOTCONN同步对象没有绑定到事件对象上
注解
  • 上下文:任意

在文件 Sem.hxx255 行定义.

256 {
257 return xwos_sem_unbind(mSemPtr, sel->getXwosObj());
258 }
static xwer_t xwos_sem_unbind(struct xwos_sem *sem, struct xwos_sel *sel)
XWOS API:从信号选择器上解绑信号量对象
Definition sem.h:314
函数调用图:

◆ unbind() [2/2]

template<xwsz_t TSelNum>
xwer_t xwos::sync::Sem::unbind ( Sel< TSelNum > &  sel)
inline

从信号选择器上解绑信号量对象

参数
[in]sel信号选择器的引用
返回
错误码
返回值
XWOK没有错误
-EFAULT空指针
-ENOTCONN同步对象没有绑定到事件对象上
注解
  • 上下文:任意

在文件 Sem.hxx271 行定义.

272 {
273 return xwos_sem_unbind(mSemPtr, sel.getXwosObj());
274 }
函数调用图:

◆ getXwosObj()

struct xwos_sem * xwos::sync::Sem::getXwosObj ( )
inline

获取XWOS对象指针

在文件 Sem.hxx279 行定义.

279{ return mSemPtr; }

结构体成员变量说明

◆ mSemPtr

struct xwos_sem* xwos::sync::Sem::mSemPtr
protected

在文件 Sem.hxx73 行定义.


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