Multithreading lua表线程安全吗?

Multithreading lua表线程安全吗?,multithreading,lua,Multithreading,Lua,比如说,我有一个lua表t={“a”={},b”={} 我的问题是,我有两个线程,线程A,线程B。 如果我通过lua_newthread为这两个线程分别创建两个lua_状态,并且线程A只读/写t.A,线程B只读/写t.B 我应该在上面的每个线程中使用lua_锁吗 如果答案是肯定的,那么t上的任何操作都需要lua\u锁吗?lua表不是线程安全的,但是不需要锁,因为线程不在同一个元素上读/写。TL;DR:Lua引擎状态不是线程安全的,因此没有理由使Lua表线程安全 lua_状态不是发动机状态,尽管它

比如说,我有一个lua表
t={“a”={},b”={}

我的问题是,我有两个线程,线程A,线程B。 如果我通过lua_newthread为这两个线程分别创建两个lua_状态,并且线程A只读/写
t.A
,线程B只读/写
t.B

我应该在上面的每个线程中使用lua_锁吗


如果答案是肯定的,那么
t
上的任何操作都需要lua\u锁吗?

lua表不是线程安全的,但是不需要锁,因为线程不在同一个元素上读/写。

TL;DR:Lua引擎状态不是线程安全的,因此没有理由使Lua表线程安全

lua_状态不是发动机状态,尽管它引用了发动机状态。相反,它是Lua线程的状态,与应用程序线程无关。具有相同引擎状态的Lua线程不能并发执行,因为Lua引擎本质上是单线程的(但您可以同时使用任意数量的引擎),相反,它们是协作多任务的

因此创建一个新的Lua线程,而不是OS线程

lua\u lock
等不涉及线程安全,但本机代码在实现的第2版中通过调用引擎保持lua对象的方式:

现代的方法是使用注册表,一个可以从本机代码访问的Lua表:

不,Lua表不是线程安全的


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

我建议阅读
lua\u newthread
的功能。答案是“是”:您应该在上面的每个线程中使用
lua\u lock
。答案在页面的答案标题下;)但它们属于同一个表
t