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