Class mtxsp

XWLUA类:互斥锁对象强指针

互斥锁对象强指针是Lua语言中的一种 userdata ,用于 强引用 XWOS的互斥锁对象。

强引用 表示会增加XWOS的互斥锁对象的 引用计数

MetaMethods

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

Methods

mtxsp:lock (mtxsp) 等待上锁互斥锁
mtxsp:trylock (mtxsp) 尝试上锁互斥锁
mtxsp:lock_to (mtxsp, to) 限时等待上锁互斥锁
mtxsp:unlock (mtxsp) 解锁互斥锁
mtxsp:status (mtxsp) 获取互斥锁状态


MetaMethods

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

将互斥锁对象强指针拷贝到全局导出表 xwxt 中。

此元方法意味着互斥锁对象的强引用多了一个,引用计数1

Parameters:

  • mtxsp userdata (in) 互斥锁对象强指针
  • vm userdata (in) 目标虚拟机

Usage:

    mtxsp = ... -- 创建互斥锁的代码(省略)
    xwxt.somemtx = mtxsp -- 互斥锁对象的引用计数加1
    mtxsp2 = xwxt.somemtx -- 互斥锁对象的引用计数加1
    xwxt.somemtx = nil -- 互斥锁对象的引用计数减1
mtxsp:metatable.__gc (mtxsp)
元方法:__gc

互斥锁对象强指针的垃圾回收方法。

此元方法意味着互斥锁对象的强引用少了一个,引用计数1

如果互斥锁对象被销毁时还处于上锁状态,将自动被解锁。

Parameters:

  • mtxsp userdata (in) 互斥锁对象强指针

Usage:

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

互斥锁对象强指针的 to-be-close 特性函数。

当互斥锁对象强指针离开其作用域时,将自动解锁关联的互斥锁。

Parameters:

  • mtxsp userdata (in) 互斥锁对象强指针

Usage:

    mymtx = xwos.mtx.new()
    function test()
      local scopelock<close> = mymtx
      rc = scopelock:lock()
      if (rc == 0) then
        -- 临界区
      end
    end -- 自动解锁互斥锁
mtxsp:metatable.__tostring (mtxsp)
元方法:__tostring

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

Parameters:

  • mtxsp userdata (in) 互斥锁对象强指针

Usage:

    print(mtxsp)

Methods

mtxsp:lock (mtxsp)
等待上锁互斥锁

如果互斥锁无法上锁,就会阻塞当前线程。

Parameters:

  • mtxsp userdata (in) 互斥锁对象强指针

Returns:

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

Usage:

    lock = xwos.mtx.new()
    rc = lock:lock()
    if (rc == 0) then
      -- 临界区
      lock:unlock()
    end
mtxsp:trylock (mtxsp)
尝试上锁互斥锁

如果互斥锁无法上锁,不会阻塞调用线程。

Parameters:

  • mtxsp userdata (in) 互斥锁对象强指针

Returns:

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

Usage:

    lock = xwos.mtx.new()
    rc = lock:trylock() -- 尝试获取互斥锁,失败直接返回-ENODATA
    if (rc == 0) then
      -- 临界区
      lock:unlock()
    elseif (rc == -61) then
      print("Can't lock!")
    end
mtxsp:lock_to (mtxsp, to)
限时等待上锁互斥锁

如果互斥锁无法上锁,就会阻塞当前线程。

Parameters:

  • mtxsp userdata (in) 互斥锁对象强指针
  • to number (in) 期望唤醒的时间点

Returns:

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

Usage:

    lock = xwos.mtx.new()
    rc = lock:lock_to(xwtm.ft(xwtm.s(1))) -- 最多等待互斥锁1s,超时返回-ETIMEDOUT
    if (rc == 0) then
      -- 临界区
      lock:unlock()
    elseif (rc == -116) then
      print("Timeout!")
    end
mtxsp:unlock (mtxsp)
解锁互斥锁

Parameters:

  • mtxsp userdata (in) 互斥锁对象强指针

Returns:

    number 错误码
     ● 0 没有错误
     ● -EOWNER 线程并没有锁定此互斥锁
     ● -ENOTTHDCTX 不在线程上下文中

Usage:

    lock = xwos.mtx.new()
    rc = lock:lock()
    if (rc == 0) then
      -- 临界区
      lock:unlock()
    end
mtxsp:status (mtxsp)
获取互斥锁状态

Parameters:

  • mtxsp userdata (in) 互斥锁对象强指针

Returns:

    number 锁状态
     ● 0 未锁定
     ● 1 锁定

Usage:

    lock = xwos.mtx.new()
    rc = lock:lock()
    if (rc == 0) then
      -- 临界区
      lkst = lock:status()
      lock:unlock()
    end
generated by LDoc 1.5.0 Last updated 2024-12-17 12:17:46