Class splksp
XWLUA类:自旋锁对象强指针
自旋锁对象强指针是Lua语言中的一种 userdata
,用于 强引用 XWLUA的自旋锁对象。
强引用 表示会增加XWLUA的自旋锁对象的 引用计数 。
MetaMethods
splksp:metatable.__copy (splksp, vm) | 元方法:__copy |
splksp:metatable.__gc (splksp) | 元方法:__gc |
splksp:metatable.__close (splksp) | 元方法:__close |
splksp:metatable.__tostring (splksp) | 元方法:__tostring |
Methods
splksp:lock (splksp) | 上锁自旋锁 |
splksp:trylock (splksp) | 尝试上锁自旋锁 |
splksp:unlock (splksp) | 解锁自旋锁 |
splksp:get_lkst (splksp) | 获取自旋锁状态 |
MetaMethods
- splksp:metatable.__copy (splksp, vm)
-
元方法:__copy
将自旋锁对象强指针拷贝到全局导出表 xwxt 中。
此元方法意味着自旋锁对象的强引用多了一个,引用计数 加 1 。
Parameters:
- splksp userdata (in) 自旋锁对象强指针
- vm userdata (in) 目标虚拟机
Usage:
splksp = ... -- 创建自旋锁的代码(省略) xwxt.somesplk = splksp -- 自旋锁对象的引用计数加1 splksp2 = xwxt.somesplk -- 自旋锁对象的引用计数加1 xwxt.somesplk = nil -- 自旋锁对象的引用计数减1
- splksp:metatable.__gc (splksp)
-
元方法:__gc
自旋锁对象强指针的垃圾回收方法。
此元方法意味着自旋锁对象的强引用少了一个, 引用计数 减 1 。
如果自旋锁对象被销毁时还处于上锁状态,将自动被解锁。
Parameters:
- splksp userdata (in) 自旋锁对象强指针
Usage:
splksp = nil -- 删除引用 collectgarbage() -- 强制垃圾回收,将调用__gc()函数
- splksp:metatable.__close (splksp)
-
元方法:__close
自旋锁对象强指针具有 to-be-close 特性。当自旋锁对象强指针离开其作用域时,将自动解锁关联的自旋锁。
Parameters:
- splksp userdata (in) 自旋锁对象强指针
Usage:
mysplk = xwos.splk.new() function test() local scopelock<close> = mysplk scopelock:lock() -- 临界区 end -- 自动解锁自旋锁
- splksp:metatable.__tostring (splksp)
-
元方法:__tostring
将自旋锁对象强指针格式化成字符串,可用于终端打印调试。
Parameters:
- splksp userdata (in) 自旋锁对象强指针
Usage:
print(splksp)
Methods
- splksp:lock (splksp)
-
上锁自旋锁
若自旋锁无法上锁,会自旋等待。
Parameters:
- splksp userdata (in) 自旋锁对象强指针
Returns:
-
number
错误码
● 0 没有错误
● -EINVAL 参数错误Usage:
lock = xwos.splk.new() lock:lock() -- 临界区 lock:unlock()
- splksp:trylock (splksp)
-
尝试上锁自旋锁
若自旋锁无法上锁,不会自旋等待。
Parameters:
- splksp userdata (in) 自旋锁对象强指针
Returns:
-
number
错误码
● 0 没有错误
● -EINVAL 参数错误
● -EAGAIN 尝试上锁失败Usage:
lock = xwos.splk.new() rc = lock:trylock() if (rc == 0) then -- 临界区 lock:unlock() end
- splksp:unlock (splksp)
-
解锁自旋锁
Parameters:
- splksp userdata (in) 自旋锁对象强指针
Usage:
lock = xwos.splk.new() rc = lock:trylock() if (rc == 0) then -- 临界区 lock:unlock() end
- splksp:get_lkst (splksp)
-
获取自旋锁状态
Parameters:
- splksp userdata (in) 自旋锁对象强指针
Returns:
-
number
锁状态
● 0 未锁定
● 1 锁定Usage:
lock = xwos.splk.new() rc = lock:lock() if (rc == 0) then -- 临界区 lkst = lock:get_lkst() lock:unlock() end