Class semsp

XWLUA类:信号量对象强指针

信号量对象强指针是Lua语言中的一种 userdata ,用于 强引用 XWOS的信号量对象。

强引用 表示会增加XWOS的信号量对象的 引用计数

MetaMethods

semsp:metatable.__copy (semsp, vm) 元方法:__copy
semsp:metatable.__gc (semsp) 元方法:__gc
semsp:metatable.__tostring (semsp) 元方法:__tostring

Methods

semsp:bind (semsp, sel, pos) 绑定信号量对象到信号选择器
semsp:unbind (semsp, sel) 从信号选择器上解绑信号量对象
semsp:freeze (semsp) 冻结信号量
semsp:thaw (semsp) 解冻信号量
semsp:post (semsp) 发布信号量
semsp:wait (semsp) 等待并获取信号
semsp:trywait (semsp) 检查信号量对象
semsp:wait_to (semsp, to) 限时等待并获取信号量
semsp:get_value (semsp) 获取信号量的值


MetaMethods

semsp:metatable.__copy (semsp, vm)
元方法:__copy

将信号量对象强指针拷贝到全局导出表 xwxt 中。

此元方法意味着信号量对象的强引用多了一个, 引用计数1

Parameters:

  • semsp userdata (in) 信号量对象强指针
  • vm userdata (in) 目标虚拟机

Usage:

    semsp = ... -- 创建信号量(代码省略)
    xwxt.somesem = semsp -- 信号量对象的引用计数加1
    semsp2 = xwxt.somesem -- 信号量对象的引用计数加1
    xwxt.somesem = nil -- 信号量对象的引用计数减1
semsp:metatable.__gc (semsp)
元方法:__gc

信号量对象强指针的垃圾回收方法。

此元方法意味着信号量对象的强引用少了一个, 引用计数1

Parameters:

  • semsp userdata (in) 信号量对象强指针

Usage:

    semsp = nil -- 删除引用
    collectgarbage() -- 强制垃圾回收,将调用__gc()函数
semsp:metatable.__tostring (semsp)
元方法:__tostring

将信号量对象强指针格式化成字符串,可用于终端打印调试。

Parameters:

  • semsp userdata (in) 信号量对象强指针

Usage:

    print(semsp)

Methods

semsp:bind (semsp, sel, pos)
绑定信号量对象到信号选择器

Parameters:

  • semsp userdata (in) 信号量对象强指针
  • sel userdata (in) 信号选择器对象的强指针
  • pos number (in) 信号量对象映射到信号选择器位图中的位置,位置从 0 开始编号

Returns:

    number 错误码
     ● 0 没有错误
     ● -ECHRNG 位置超出范围
     ● -EALREADY 同步对象已经绑定到事件对象
     ● -EBUSY 通道已经被其他同步对象独占

Usage:

    sem = xwos.sem.new(0, 100)
    -- ...省略...
    rc = sem:bind(sel, 3) -- 绑定到信号选择器的位置3
    if (rc == 0) then
      -- 绑定成功
    else
      -- 绑定失败
    end
semsp:unbind (semsp, sel)
从信号选择器上解绑信号量对象

Parameters:

  • semsp userdata (in) 信号量对象强指针
  • sel userdata (in) 信号选择器对象的强指针

Returns:

    number 错误码
     ● 0 没有错误
     ● -ENOTCONN 同步对象没有绑定到事件对象上

Usage:

    sem:unbind(sel)
semsp:freeze (semsp)
冻结信号量

Parameters:

  • semsp userdata (in) 信号量对象强指针

Returns:

    number 错误码
     ● 0 没有错误
     ● -EALREADY 信号量对象已被冻结

Usage:

    sem:freeze()
semsp:thaw (semsp)
解冻信号量

Parameters:

  • semsp userdata (in) 信号量对象强指针

Returns:

    number 错误码
     ● 0 没有错误
     ● -EALREADY 信号量对象已被冻结

Usage:

    sem:thaw()
semsp:post (semsp)
发布信号量

Parameters:

  • semsp userdata (in) 信号量对象强指针

Returns:

    number 错误码
     ● 0 没有错误
     ● -ENEGATIVE 信号量对象已被冻结
     ● -ERANGE 信号量对象的值已经最大

Usage:

    sem:post()
semsp:wait (semsp)
等待并获取信号

Parameters:

  • semsp userdata (in) 信号量对象强指针

Returns:

    number 错误码
     ● 0 没有错误
     ● -EINVAL 参数错误
     ● -EINTR 等待被中断
     ● -ENOTTHDCTX 不在线程上下文中

Usage:

    sem = xwos.sem.new(0, 0)
    rc = sem:wait()
    if (rc == 0) then
      -- 获取到一个信号
    else
      -- 错误发生
    end
semsp:trywait (semsp)
检查信号量对象

若没有检测到信号,立即返回,不会阻塞调用线程。

Parameters:

  • semsp userdata (in) 信号量对象强指针

Returns:

    number 错误码
     ● 0 没有错误
     ● -EINVAL 参数错误
     ● -EINTR 等待被中断
     ● -ENOTTHDCTX 不在线程上下文中
     ● -ENODATA 尝试失败

Usage:

    sem = xwos.sem.new(0, 0)
    rc = sem:trywait() -- 最多等待1s
    if (rc == 0) then
      -- 获取到一个信号
    elseif (rc == -61) then
      -- 没有检测到信号
    else
      -- 错误发生
    end
semsp:wait_to (semsp, to)
限时等待并获取信号量

Parameters:

  • semsp userdata (in) 信号量对象强指针
  • to number (in) 期望的阻塞等待时间

Returns:

    number 错误码
     ● 0 没有错误
     ● -EINVAL 参数错误
     ● -EINTR 等待被中断
     ● -ENOTTHDCTX 不在线程上下文中
     ● -ETIMEDOUT 超时

Usage:

    sem = xwos.sem.new(0, 0)
    rc = sem:wait(xwtm.ft(xwtm.s(1))) -- 最多等待1s
    if (rc == 0) then
      -- 获取到一个信号
    elseif (rc == -116) then
      -- 超时
    else
      -- 错误发生
    end
semsp:get_value (semsp)
获取信号量的值

Parameters:

  • semsp userdata (in) 自旋锁对象强指针

Returns:

    number 信号量的值

Usage:

    sem = xwos.sem.new(1, 0)
    value = sem:get_value()
generated by LDoc 1.5.0 Last updated 2024-12-17 12:17:46