gpt4 book ai didi

multithreading - lua表线程安全吗?

转载 作者:行者123 更新时间:2023-12-04 08:25:53 25 4
gpt4 key购买 nike

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

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

我应该在上面的每个线程中使用 lua_lock 吗?

如果答案是肯定的,那么,t 上的任何操作是否需要 lua_lock?

最佳答案

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

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

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

lua_lock 等不涉及线程安全,而是 native 代码在实现版本 2 中跨引擎调用保持 Lua 对象的方式:https://www.lua.org/manual/2.1/subsection3_5_6.html
现代方法是使用注册表,这是一个可从 native 代码访问的 Lua 表:http://www.lua.org/manual/5.3/manual.html#4.5

关于multithreading - lua表线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46344428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com