Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 在多线程程序中嵌入多个lua实例_Multithreading_Lua - Fatal编程技术网

Multithreading 在多线程程序中嵌入多个lua实例

Multithreading 在多线程程序中嵌入多个lua实例,multithreading,lua,Multithreading,Lua,我有一个有4个线程的程序 在每个线程中,我执行一个luaL_newstate() 每个线程只能访问自己的lua实例 有什么我需要担心的吗?[即,是否存在所有lua实例在我背后共享的隐藏状态?] 谢谢 不,这样就可以了。所有解释器状态都包含在每个Lua实例中。我甚至想说,这是将Lua用于多线程和/或进程的首选方法 如果您最终发现确实需要在Lua状态之间通信,那么最好序列化数据并使用C API传递它。我建议您阅读“”白皮书。它介绍了一种将多个Lua与for一起使用的方法。为每个线程创建一个Lua\u

我有一个有4个线程的程序

在每个线程中,我执行一个luaL_newstate()

每个线程只能访问自己的lua实例

有什么我需要担心的吗?[即,是否存在所有lua实例在我背后共享的隐藏状态?]


谢谢

不,这样就可以了。所有解释器状态都包含在每个Lua实例中。我甚至想说,这是将Lua用于多线程和/或进程的首选方法


如果您最终发现确实需要在Lua状态之间通信,那么最好序列化数据并使用C API传递它。我建议您阅读“”白皮书。它介绍了一种将多个Lua与for一起使用的方法。

为每个线程创建一个
Lua\u状态
,这是多个Lua线程执行的一个很好的解决方案。然而,这些国家是非常分离的。特别是,它们之间很难安全通信,因为只要每次从单个线程访问每个
Lua\u状态
,Lua API就只能是线程安全的。(除非
lua_lock
lua_unlock
被实现为合适的互斥锁,它们不在lua核心的默认版本中。)

如果这种隔离级别是不可接受的,那么您需要研究几种机制中的一种,以允许Lua实例在线程化过程中与其他实例很好地协作

我最喜欢的选择是,它提供了多个线程以及一种机制,用于以线程安全的方式在它们之间传递消息和共享值。大多数Lua类型的值(包括
userdata
以及使用它的库的一点C端支持)都可以安全有效地从一个通道传递到另一个通道


存在其他机制,其中大多数机制的一个良好起点是Lua用户。

只要不先将Lua实例转换为C,就不要尝试在Lua实例之间传递值,就可以了。例如,在实例之间共享可变表几乎是不可能的

您所要求的听起来很简单,但并不一定比运行多个进程更有用,每个进程都有自己的Lua和地址空间