Class sqlksp
XWLUA类:顺序锁对象强指针
顺序锁对象强指针是Lua语言中的一种 userdata ,用于 强引用 XWLUA的顺序锁对象。
强引用 表示会增加XWLUA的顺序锁对象的 引用计数 。
MetaMethods
| sqlksp:metatable.__copy (sqlksp, vm) | 元方法:__copy | 
| sqlksp:metatable.__gc (sqlksp) | 元方法:__gc | 
| sqlksp:metatable.__close (sqlksp) | 元方法:__close | 
| sqlksp:metatable.__tostring (sqlksp) | 元方法:__tostring | 
Methods
| sqlksp:rd_begin (sqlksp) | 开启读临界区 | 
| sqlksp:rd_retry (sqlksp, seq) | 测试顺序值是否改变 | 
| sqlksp:get_seq (sqlksp) | 获取顺序锁的顺序值 | 
| sqlksp:wr_lock (sqlksp) | 开启写临界区 | 
| sqlksp:wr_trylock (sqlksp) | 尝试开启写临界区 | 
| sqlksp:rdex_lock (sqlksp) | 开启独占读临界区 | 
| sqlksp:rdex_trylock (sqlksp) | 尝试开启独占读临界区 | 
| sqlksp:unlock (sqlksp) | 解锁顺序锁 | 
| sqlksp:get_lkst (sqlksp) | 获取顺序锁状态 | 
MetaMethods
- sqlksp:metatable.__copy (sqlksp, vm)
- 
    元方法:__copy 
将顺序锁对象强指针拷贝到全局导出表 xwxt 中。 此元方法意味着顺序锁对象的强引用多了一个, 引用计数 加 1 。 Parameters:- sqlksp userdata (in) 顺序锁对象强指针
- vm userdata (in) 目标虚拟机
 Usage:sqlksp = ... -- 创建顺序锁的代码(省略) xwxt.somesqlk = sqlksp -- 顺序锁对象的引用计数加1 sqlksp2 = xwxt.somesqlk -- 顺序锁对象的引用计数加1 xwxt.somesqlk = nil -- 顺序锁对象的引用计数减1 
- sqlksp:metatable.__gc (sqlksp)
- 
    元方法:__gc 
顺序锁对象强指针的垃圾回收方法。 此元方法意味着顺序锁对象的强引用少了一个, 引用计数 减 1 。 如果顺序锁对象被销毁时还处于 上锁状态 ,将自动被解锁。 上锁状态 是指处于 独占写 与 独占读 临界区,而 非独占读 临界区不属于 上锁状态 。 Parameters:- sqlksp userdata (in) 顺序锁对象强指针
 Usage:sqlksp = nil -- 删除引用 collectgarbage() -- 强制垃圾回收,将调用__gc()函数 
- sqlksp:metatable.__close (sqlksp)
- 
    元方法:__close 
顺序锁对象强指针具有 to-be-close 特性。当顺序锁对象强指针离开其作用域时,若关联的顺序锁还处于 上锁状态 ,将自动解锁。 上锁状态 是指处于 独占写 与 独占读 临界区,而 非独占读 临界区不属于 上锁状态 。 Parameters:- sqlksp userdata (in) 顺序锁对象强指针
 Usage:mysqlk = xwos.sqlk.new() function test() local scopelock<close> = mysqlk scopelock:lock("wr") -- 临界区 end -- 自动解锁顺序锁 
- sqlksp:metatable.__tostring (sqlksp)
- 
    元方法:__tostring 
将顺序锁对象强指针格式化成字符串,可用于终端打印调试。 Parameters:- sqlksp userdata (in) 顺序锁对象强指针
 Usage:print(sqlksp)
Methods
- sqlksp:rd_begin (sqlksp)
- 
    开启读临界区
    Parameters:- sqlksp userdata (in) 顺序锁对象强指针
 Returns:- 
           number
        锁当前的顺序值
    
 Usage:lock = xwos.sqlk.new() repeat seq = lock:rd_begin() -- 读临界区 retry = lock:rd_retry(seq) until (not retry) 
- sqlksp:rd_retry (sqlksp, seq)
- 
    测试顺序值是否改变
    Parameters:- sqlksp userdata (in) 顺序锁对象强指针
- seq number (in) 顺序锁非独占读临界区开启时的顺序值
 Returns:- 
           boolean
        是否需要重试
    
 Usage:lock = xwos.sqlk.new() repeat seq = lock:rd_begin() -- 读临界区 retry = lock:rd_retry(seq) until (not retry) 
- sqlksp:get_seq (sqlksp)
- 
    获取顺序锁的顺序值
    Parameters:- sqlksp userdata (in) 顺序锁对象强指针
 Returns:- 
           userdata
        锁的顺序值
    
 Usage:seq = lock:get_seq()
- sqlksp:wr_lock (sqlksp)
- 
    开启写临界区 
若顺序锁无法上锁,就自旋等待。 Parameters:- sqlksp userdata (in) 顺序锁对象强指针
 Returns:- 
           number
         错误码
 
 ● 0 没有错误
 ● -EINVAL 参数错误Usage:lock = xwos.sqlk.new() lock:wr_lock() -- 独占写临界区 lock:unlock() 
- sqlksp:wr_trylock (sqlksp)
- 
    尝试开启写临界区 
若顺序锁无法上锁,不会自旋等待。 Parameters:- sqlksp userdata (in) 顺序锁对象强指针
 Returns:- 
           number
         错误码
 
 ● 0 没有错误
 ● -EINVAL 参数错误
 ● -EAGAIN 尝试上锁失败Usage:lock = xwos.sqlk.new() rc = lock:wr_trylock() if (rc == 0) then -- 独占写临界区 lock:unlock() end 
- sqlksp:rdex_lock (sqlksp)
- 
    开启独占读临界区 
若顺序锁无法上锁,就自旋等待。 Parameters:- sqlksp userdata (in) 顺序锁对象强指针
 Returns:- 
           number
         错误码
 
 ● 0 没有错误
 ● -EINVAL 参数错误Usage:lock = xwos.sqlk.new() lock:rdex_lock() -- 独占读临界区 lock:unlock() 
- sqlksp:rdex_trylock (sqlksp)
- 
    尝试开启独占读临界区 
若顺序锁无法上锁,不会自旋等待。 Parameters:- sqlksp userdata (in) 顺序锁对象强指针
 Returns:- 
           number
         错误码
 
 ● 0 没有错误
 ● -EINVAL 参数错误
 ● -EAGAIN 尝试上锁失败Usage:lock = xwos.sqlk.new() rc = lock:rdex_trylock() if (rc == 0) then -- 独占读临界区 lock:unlock() end 
- sqlksp:unlock (sqlksp)
- 
    解锁顺序锁 
此方法会根据顺序锁上锁的类型(独占写或独占读),自动选择解锁方式。 Parameters:- sqlksp userdata (in) 顺序锁对象强指针
 Usage:- lock = xwos.sqlk.new() lock:wr_lock() -- 独占写临界区 lock:unlock() 
- lock = xwos.sqlk.new() rc = lock:rdex_trylock() if (rc == 0) then -- 独占读临界区 lock:unlock() end 
 
- sqlksp:get_lkst (sqlksp)
- 
    获取顺序锁状态
    Parameters:- sqlksp userdata (in) 顺序锁对象强指针
 Returns:- 
           number
         锁状态
 
 ● 0 未锁定
 ● 1 独占读锁
 ● 2 写锁Usage:lock = xwos.sqlk.new() rc = lock:lock() if (rc == 0) then -- 临界区 lkst = lock:get_lkst() lock:unlock() end