lua表线程安全吗?

时间:2017-09-21 12:50:24

标签: multithreading lua

说,我有一个lua表t={"a"={}, "b"={}}

我的问题是,我有两个线程,线程A,线程B. 如果我通过lua_newthread为这两个线程单独创建两个lua_State,而线程A只读/写t.a,则线程B只读/写t.b

我应该在上面的每个帖子中使用lua_lock吗?

如果答案为是,那么,t上的任何操作都需要lua_lock吗?

3 个答案:

答案 0 :(得分:0)

lua表不是线程安全的,但是没有必要锁定,因为线程不能在同一元素上读/写。

答案 1 :(得分:0)

TL; DR:Lua引擎状态不是线程安全的,所以没有理由让Lua表成为线程安全的。

lua_State不是引擎状态,但引用它。相反,它是Lua线程的状态,与应用程序线程无关。具有相同引擎状态的Lua线程无法并发执行,因为Lua引擎本质上是单线程的(虽然您可以同时使用任意数量的引擎),而是协作多任务。

所以lua_State *lua_newthread (lua_State *L);创建一个新的Lua线程,而不是OS线程。

lua_lock之类的内容并未引用线程安全性,但本机代码可以在实现的第2版中通过对引擎的调用来保持Lua对象的方式:https://www.lua.org/manual/2.1/subsection3_5_6.html 现代方式是使用注册表,一个可从本机代码访问的Lua表:http://www.lua.org/manual/5.3/manual.html#4.5

答案 2 :(得分:0)

不,lua表不是线程安全的。

是的,表t上的所有操作都需要lua_lock,因为它们都不是原子操作。