Class brsp
XWLUA类:线程栅栏对象强指针
线程栅栏对象强指针是Lua语言中的一种 userdata
,用于 强引用 XWOS的线程栅栏对象。
强引用 表示会增加XWOS的线程栅栏对象的 引用计数 。
MetaMethods
brsp:metatable.__copy (brsp, vm) | 元方法:__copy |
brsp:metatable.__gc (brsp) | 元方法:__gc |
brsp:metatable.__tostring (brsp) | 元方法:__tostring |
Methods
brsp:bind (brsp, sel, pos) | 绑定线程栅栏对象到信号选择器 |
brsp:unbind (brsp, sel) | 从信号选择器上解绑线程栅栏对象 |
brsp:bmp (brsp) | 新建位图,位的数量与线程栅栏中的线程槽数量相等 |
brsp:num (brsp) | 获取线程栅栏中线程槽(位)的数量 |
brsp:wait (brsp) | 等待所有线程到达栅栏 |
brsp:wait_to (brsp, to) | 限时等待所有线程到达栅栏 |
MetaMethods
- brsp:metatable.__copy (brsp, vm)
-
元方法:__copy
将线程栅栏对象强指针拷贝到全局导出表 xwxt 中。
此元方法意味着线程栅栏对象的强引用多了一个, 引用计数 加 1 。
Parameters:
- brsp userdata (in) 线程栅栏对象强指针
- vm userdata (in) 目标虚拟机
Usage:
brsp = ... -- 创建线程栅栏的代码(省略) xwxt.somebr = brsp -- 线程栅栏对象的引用计数加1 brsp2 = xwxt.somebr -- 线程栅栏对象的引用计数加1 xwxt.somebr = nil -- 线程栅栏对象的引用计数减1
- brsp:metatable.__gc (brsp)
-
元方法:__gc
线程栅栏对象强指针的垃圾回收方法。
此元方法意味着线程栅栏对象的强引用少了一个, 引用计数 减 1 。
Parameters:
- brsp userdata (in) 线程栅栏对象强指针
Usage:
brsp = nil -- 删除引用 collectgarbage() -- 强制垃圾回收,将调用__gc()函数
- brsp:metatable.__tostring (brsp)
-
元方法:__tostring
将线程栅栏对象强指针格式化成字符串,可用于终端打印调试。
Parameters:
- brsp userdata (in) 线程栅栏对象强指针
Usage:
print(brsp)
Methods
- brsp:bind (brsp, sel, pos)
-
绑定线程栅栏对象到信号选择器
Parameters:
- brsp userdata (in) 线程栅栏对象强指针
- sel userdata (in) 信号选择器对象的强指针
- pos number (in) 线程栅栏对象映射到信号选择器位图中的位置,位置从 0 开始编号
Returns:
-
number
错误码
● 0 没有错误
● -ECHRNG 位置超出范围
● -EALREADY 同步对象已经绑定到事件对象
● -EBUSY 通道已经被其他同步对象独占Usage:
br = xwos.br.new(32) -- ...省略... rc = br:bind(sel, 3) -- 绑定到线程栅栏的位置3 if (rc == 0) then -- 绑定成功 else -- 绑定失败 end
- brsp:unbind (brsp, sel)
-
从信号选择器上解绑线程栅栏对象
Parameters:
- brsp userdata (in) 线程栅栏对象强指针
- sel userdata (in) 信号选择器对象的强指针
Returns:
-
number
错误码
● 0 没有错误
● -ENOTCONN 同步对象没有绑定到事件对象上Usage:
br:unbind(sel)
- brsp:bmp (brsp)
-
新建位图,位的数量与线程栅栏中的线程槽数量相等
Parameters:
- brsp userdata (in) 线程栅栏对象强指针
Returns:
-
userdata
位图
Usage:
bmp = br:bmp()
- brsp:num (brsp)
-
获取线程栅栏中线程槽(位)的数量
Parameters:
- brsp userdata (in) 线程栅栏对象强指针
Returns:
-
number
数量
Usage:
num = br:num()
- brsp:wait (brsp)
-
等待所有线程到达栅栏
Parameters:
- brsp userdata (in) 线程栅栏对象强指针
Returns:
-
number
错误码
● 0 没有错误
● -EINVAL 参数错误
● -EINTR 等待被中断
● -ENOTTHDCTX 不在线程上下文中Usage:
br = xwos.br.new(4) -- 同步4个线程 -- ...省略... rc = br:wait() if (rc == 0) then -- 线程全部到达线程栅栏 else -- 错误发生 end
- brsp:wait_to (brsp, to)
-
限时等待所有线程到达栅栏
Parameters:
- brsp userdata (in) 线程栅栏对象强指针
- to number (in) 期望的阻塞等待时间
Returns:
-
number
错误码
● 0 没有错误
● -EINVAL 参数错误
● -EINTR 等待被中断
● -ENOTTHDCTX 不在线程上下文中
● -ETIMEDOUT 超时Usage:
br = xwos.br.new(4) -- 同步4个线程 -- ...省略... rc = br:wait_to(xwtm.ft(xwtm.s(1))) -- 最多等待1s if (rc == 0) then -- 线程全部到达线程栅栏 elseif (rc == -116) -- 超时 else -- 错误发生 end