使用C++嵌入Lua,从不同的线程调用Lua函数是否可行?

3
我正在使用VS2008、lua 5.1和luabind 0.9.1。
从C ++调用Lua函数没问题。
如果有多个线程并且每个线程都从Lua函数中调用,这种情况会有任何问题吗?只有一个Lua状态。
在这种情况下,我是否应该有更多的Lua状态?哪一个比较常见?

几次快速的谷歌搜索似乎表明Lua虚拟机不是线程安全的,因此我建议为每个线程使用一个状态。 - Some programmer dude
但是,如果它只是调用Lua函数呢?调用Lua函数会改变其状态吗? - Hongseok Yoon
我猜测所有的虚拟机寄存器、调用栈和其他重要变量都存储在状态中,如果两个线程同时使用状态,这将是一个灾难性的情况。可以通过例如互斥锁来保护调用Lua函数,或者使用不同的状态。 - Some programmer dude
1个回答

4

就这样不行。Lua用户维基有一篇关于线程的不错的页面


在这种情况下特别值得注意的是维基中的 Lua锁定 部分。请注意,从本质上讲,这是一个GIL,如果你在线程中进行很多处理,最终会得到几乎串行的代码... - Michal Kottman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接