Module xwxt
XWLUA模块:全局导出表
为了实现多线程共享数据,XWLUA中实现了一个 全局导出表(xwxt) ,全局导出表中的数据对所有线程可见,并且是线程安全的。
xwxt.a = 3 -- 在xwxt中创建Number变量a,并赋值3,xwxt.a对所有线程可见 xwxt["a"] = 3 -- 与上一句等价 xwxt.f = function () print("HI, XWOS") end -- 在xwxt中创建函数f,xwxt.f可被所有线程访问 xwxt["f"] = function () print("HI, XWOS") end -- 与上一句等价 myfunc = xwxt.f -- 任意线程都可从全局导出表中获取函数f xwxt.f = nil -- 删除xwxt中的函数f xwxt.gc() -- 强制全局导出表做一次垃圾回收
支持在全局导出表中传递的类型:
- boolean
- lightuserdata
- userdata
- number
- string
- function
- table
Functions
append (table) | 将源虚拟机中的表元素导出到全局导出表 xwxt |
gc () | 强制全局导出表 xwxt 做一次垃圾回收 |
MetaMethods
__newindex (xwxt, key, value) | 元方法:__newindex |
__index (xwxt, key) | 元方法:__index |
Functions
- append (table)
-
将源虚拟机中的表元素导出到全局导出表 xwxt
表中的 索引 只能是字符串,其他将被忽略。
Parameters:
- table table (in) 表
Usage:
xwxt.append(table)
- gc ()
-
强制全局导出表 xwxt 做一次垃圾回收
Usage:
xwxt.gc()
MetaMethods
- __newindex (xwxt, key, value)
-
元方法:__newindex
将全局导出表 xwxt 的 key 赋值为 value 。其结果是将数据导出到全局导出表,数据将对所有线程可见。
全局导出表的 索引 只能是 字符串 。
Lua中的原生数据类型,导出到全局导出表时,会做一次 深 拷贝,这些数据类型是:
● 数值类型:直接拷贝;
● 字符串:直接拷贝;
● 函数:dump()成字符串后拷贝;
● 布尔类型:直接拷贝;
● 表:
○ 如果 metatable["__copy"] 是一个函数,则执行 metatable.__copy() 函数;
○ 如果 metatable["__copy"] 为空或不是函数,则依次拷贝表中以及 metatable 中的每一个键值对,但如果键值对的 索引 不为字符串,就跳过。
● userdata:
○ 如果 metatable["__copy"] 是一个函数,则执行 metatable.__copy() 函数;
○ 如果 metatable["__copy"] 为空或不是函数,就略过。
● lightuserdata:同userdata。
Parameters:
Usage:
xwxt.key = value xwxt["key"] = value xwxt.key = nil -- 从全局导出表 xwxt 中删除"key"
- __index (xwxt, key)
-
元方法:__index
将全局导出表 xwxt 中索引的值读取到线程。
Parameters:
Returns:
-
全局导出表中索引的值
Usage:
value = xwxt.key value = xwxt["key"]