【问题标题】:Is it okay calling Lua function from different thread(embedding Lua in C++)?可以从不同的线程调用 Lua 函数(在 C++ 中嵌入 Lua)吗?
【发布时间】:2012-01-11 08:41:21
【问题描述】:

我正在使用 VS2008、lua 5.1 和 luabind 0.9.1。

从 C++ 调用 Lua 函数就可以了。

如果有多个线程,每个线程都调用Lua函数,这种情况有问题吗?只有 ONE Lua 状态。

在那种情况下,我应该有更多的 Lua 状态吗?哪一种比较常见?

【问题讨论】:

  • 一些快速的 Google 搜索似乎表明 Lua VM 不是线程安全的,所以我建议每个线程使用一个状态。
  • 但是,如果它只是调用 Lua 函数呢?调用Lua函数可以改变它的状态?
  • 我猜所有的 VM 寄存器和调用堆栈和其他重要变量都存储在状态中,如果两个线程同时使用状态,这将是灾难的根源。要么使用例如保护 Lua 函数的调用。互斥体,或使用不同的状态。

标签: c++ lua


【解决方案1】:

那样不行。 Lua 用户 wiki 有一个很好的 page 关于线程。

【讨论】:

  • 在这种情况下特别值得注意的是 wiki 中的 Locking by Lua 部分。请注意,这本质上是GIL,如果您在线程中进行大量处理,您最终会得到相当多的串行代码......
猜你喜欢
  • 2011-06-19
  • 2016-06-24
  • 2014-11-10
  • 2014-09-01
  • 2015-07-14
  • 1970-01-01
  • 2013-02-19
  • 2015-12-30
相关资源
最近更新 更多