Multithreading Lua操作,在多线程环境中工作
我的应用程序在具有全局互斥的多线程环境中使用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\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线程使用单独的状态
看看一些多线程解决方案,例如 请透露你的隶属关系。