代码之家  ›  专栏  ›  技术社区  ›  Francis

lua table线程安全吗?

  •  3
  • Francis  · 技术社区  · 9 年前

    喂,我有一张lua桌子 t={"a"={}, "b"={}} .

    我的问题是,我有两个线程,线程A,线程B。 t.a ,线程B仅读/写 t.b .

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

    如果答案是肯定的,那么在 t 需要lua_锁吗?

    3 回复  |  直到 8 年前
        1
  •  2
  •   Deduplicator    8 年前

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

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

    lua_lock 诸如此类的内容并不涉及线程安全,而是本机代码在实现版本2的引擎调用中保持Lua对象的方式: https://www.lua.org/manual/2.1/subsection3_5_6.html
    http://www.lua.org/manual/5.3/manual.html#4.5

        2
  •  0
  •   Mead    8 年前

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

        3
  •  0
  •   Francis    8 年前

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

    t lua_lock