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