技术参考手册: 线程栅栏
线程栅栏的静态初始化、销毁
线程栅栏的动态创建、删除
获取事件的状态
同步线程
使用信号选择器选择线程栅栏
线程栅栏对象的生命周期管理
- 通过 对象指针 管理生命周期:
- 通过 对象描述符 管理生命周期:
对象描述符和对象标签
已知线程栅栏对象的指针的情况下,可以通过 xwos_br_get_d() 获取 xwos_br_d , 或可以通过 xwos_br_get_tik() 获取对象标签。
C++
C++头文件: xwos/osal/sync/br.hxx
◆ XWOS_BR_NILD
XWOS API:空的线程栅栏对象描述符
在文件 br.h 第 98 行定义.
◆ xwos_br_init()
XWOS API:静态方式初始化线程栅栏
- 参数
-
| [in] | br | 线程栅栏对象的指针 |
| [in] | num | 线程栅栏中的线程数量 |
| [in] | bmp | 线程栅栏用来记录线程抵达事件的位图缓冲区 |
| [in] | msk | 线程栅栏用来记录线程掩码状态的位图缓冲区,长度应与bmp一致 |
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
- 注解
-
在文件 br.h 第 113 行定义.
115{
116 return xwosdl_br_init(&br->
osbr, num, bmp, msk);
117}
◆ xwos_br_fini()
XWOS API:销毁静态方式初始化的线程栅栏
- 参数
-
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
- 注解
-
在文件 br.h 第 129 行定义.
130{
131 return xwosdl_br_fini(&br->
osbr);
132}
◆ xwos_br_grab()
XWOS API:增加线程栅栏对象的引用计数
- 参数
-
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -EOBJDEAD | 对象无效 |
- 注解
-
此函数主要用于管理 静态对象 的引用计数。 若用于 动态对象 ,需要确保对象的指针一定不是野指针。
在文件 br.h 第 148 行定义.
149{
150 return xwosdl_br_grab(&br->
osbr);
151}
◆ xwos_br_put()
XWOS API:减少线程栅栏对象的引用计数
- 参数
-
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 空指针 |
| -EOBJDEAD | 对象无效 |
- 注解
-
此函数主要用于管理 静态对象 的引用计数。 若用于 动态对象 ,需要确保对象的指针一定不是野指针。
在文件 br.h 第 167 行定义.
168{
169 return xwosdl_br_put(&br->
osbr);
170}
◆ xwos_br_create()
XWOS API:动态方式创建线程栅栏
- 参数
-
| [out] | brd | 指向缓冲区的指针,通过此缓冲区返回线程栅栏对象描述符 |
| [in] | num | 线程栅栏中的线程数量 |
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
| -ENOMEM | 内存不足 |
- 注解
-
在文件 br.h 第 184 行定义.
185{
186 return xwosdl_br_create((xwosdl_br_d *)brd, num);
187}
◆ xwos_br_delete()
XWOS API:删除动态方式创建的线程栅栏
- 参数
-
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
- 注解
-
在文件 br.h 第 199 行定义.
200{
201 return xwosdl_br_delete(&brd.
br->
osbr, brd.
tik);
202}
◆ xwos_br_acquire()
XWOS API:检查线程栅栏对象的标签并增加引用计数
- 参数
-
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -ENILOBJD | 空的对象描述符 |
| -EOBJDEAD | 对象无效 |
| -EACCES | 对象标签检查失败 |
- 注解
-
在文件 br.h 第 216 行定义.
217{
218 return xwosdl_br_acquire(&brd.
br->
osbr, brd.
tik);
219}
◆ xwos_br_release()
XWOS API:检查对象的标签并减少引用计数
- 参数
-
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -ENILOBJD | 空的对象描述符 |
| -EOBJDEAD | 对象无效 |
| -EACCES | 对象标签检查失败 |
- 注解
-
在文件 br.h 第 233 行定义.
234{
235 return xwosdl_br_release(&brd.
br->
osbr, brd.
tik);
236}
◆ xwos_br_get_tik()
XWOS API:获取线程栅栏对象的标签
- 参数
-
- 返回
- 线程栅栏对象的标签
- 注解
-
在文件 br.h 第 246 行定义.
247{
248 return xwosdl_br_get_tik(&br->
osbr);
249}
◆ xwos_br_get_d()
XWOS API:获取线程栅栏对象描述符
- 参数
-
- 返回
- 线程栅栏对象描述符
- 注解
-
在文件 br.h 第 259 行定义.
260{
262
264 brd.
tik = xwosdl_br_get_tik(&br->
osbr);
265 return brd;
266}
◆ xwos_br_bind()
XWOS API:绑定线程栅栏到信号选择器
- 参数
-
| [in] | br | 线程栅栏对象的指针 |
| [in] | sel | 信号选择器的指针 |
| [in] | pos | 线程栅栏对象映射到位图中的位置 |
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
| -ECHRNG | 线程数量超出范围 |
| -EALREADY | 同步对象已经绑定到事件对象 |
| -EBUSY | 通道已经被其他同步对象独占 |
- 注解
-
- 当所有线程到达线程栅栏时,绑定了信号选择器的线程栅栏将向信号选择器发送信号。
在文件 br.h 第 286 行定义.
287{
288 return xwosdl_br_bind(&br->
osbr, &sel->
ossel, pos);
289}
◆ xwos_br_unbind()
XWOS API:从信号选择器上解绑线程栅栏
- 参数
-
| [in] | br | 线程栅栏对象的指针 |
| [in] | sel | 信号选择器的指针 |
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
| -ENOTCONN | 同步对象没有绑定到事件对象上 |
- 注解
-
在文件 br.h 第 303 行定义.
304{
305 return xwosdl_br_unbind(&br->
osbr, &sel->
ossel);
306}
◆ xwos_br_get_num()
XWOS API:获取线程栅栏中线程槽数量
- 参数
-
| [in] | br | 线程栅栏对象的指针 |
| [out] | numbuf | 指向缓冲区的指针,通过此缓冲区返回线程槽数量 |
- 返回
- 错误码
- 返回值
-
- 注解
-
在文件 br.h 第 319 行定义.
320{
321 return xwosdl_br_get_num(&br->
osbr, numbuf);
322}
◆ xwos_br_wait()
XWOS API:等待所有线程到达栅栏
- 参数
-
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
| -ECHRNG | 线程数量超出范围 |
| -EINTR | 等待被中断 |
| -ENOTTHDCTX:不在线程上下文中 | |
- 注解
-
在文件 br.h 第 337 行定义.
338{
339 return xwosdl_br_wait(&br->
osbr);
340}
◆ xwos_br_wait_to()
XWOS API:限时等待所有线程到达栅栏
- 参数
-
| [in] | br | 线程栅栏对象的指针 |
| [in] | to | 期望唤醒的时间点 |
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
| -ECHRNG | 线程数量超出范围 |
| -ETIMEDOUT | 超时 |
| -EINTR | 等待被中断 |
| -ENOTTHDCTX:不在线程上下文中 | |
- 注解
-
to 表示等待超时的时间点:
to 通常是未来的时间,即 当前系统时间 + delta , 可以使用 xwtm_ft(delta) 表示;
- 如果
to 是过去的时间点,将直接返回 -ETIMEDOUT 。
在文件 br.h 第 362 行定义.
363{
364 return xwosdl_br_wait_to(&br->
osbr, to);
365}
◆ xwos_br_wait_unintr()
XWOS API:等待所有线程到达栅栏,且等待不可被中断
- 参数
-
- 返回
- 错误码
- 返回值
-
| XWOK | 没有错误 |
| -EFAULT | 无效的指针或空指针 |
| -ECHRNG | 线程数量超出范围 |
| -EINTR | 等待被中断 |
| -ENOTTHDCTX:不在线程上下文中 | |
- 注解
-
在文件 br.h 第 380 行定义.
381{
382 return xwosdl_br_wait_unintr(&br->
osbr);
383}