Multithreading Lua操作,在多线程环境中工作

Multithreading Lua操作,在多线程环境中工作,multithreading,lua,Multithreading,Lua,我的应用程序在具有全局互斥的多线程环境中使用Lua。它是这样实现的: 线程锁互斥锁 调用lua\u newthread 在coroutine上执行一些初始化 在coroutine上运行lua\u resume 解锁互斥锁 lua\u锁定/解锁未实现,当lua与coroutine一起工作时,GC停止 我的问题是,如果初始化过程不需要任何全局Lua结构,我是否可以在不锁定的情况下执行步骤2和3?如果coroutine也不需要全局变量,我可以执行所有这些过程而不锁定吗 在什么情况下,我通常可以在不锁定

我的应用程序在具有全局互斥的多线程环境中使用Lua。它是这样实现的:

  • 线程锁互斥锁
  • 调用
    lua\u newthread
  • coroutine上执行一些初始化
  • coroutine上运行
    lua\u resume
  • 解锁互斥锁
  • lua\u锁定/解锁
    未实现,当lua与
    coroutine
    一起工作时,GC停止

    我的问题是,如果初始化过程不需要任何全局Lua结构,我是否可以在不锁定的情况下执行步骤2和3?如果
    coroutine
    也不需要全局变量,我可以执行所有这些过程而不锁定吗

    在什么情况下,我通常可以在不锁定的情况下使用Lua函数

    在什么情况下,我通常可以在不锁定的情况下使用Lua函数

    在相同的Lua状态(或从相同的源Lua状态派生的线程)上

    无。

    Lua是线程安全的,因为单独的Lua状态实例可以并行执行。当您从同一Lua state实例上的两个不同线程调用任何Lua API函数时,绝对没有线程安全保证

    您不能在某些同步机制之外执行任何步骤2、3或4,以防止并发访问相同的状态。不管是创建一个新线程(分配内存)还是某个“初始化过程”(可能会分配内存)。即使是不分配内存的东西也是不允许的


    Lua不保证Lua状态下的线程安全。

    如果您试图在单独的操作系统线程中使用
    Lua\u锁定/解锁
    ,Lua不保证线程安全。如果要使用多线程环境,则需要为每个OS线程使用单独的状态


    看看一些多线程解决方案,例如

    请透露你的隶属关系。