1

有没有办法让 LuaInterface 在多线程环境中工作?

我有一个多线程 c# (.Net 4) 程序集,它使用 LuaInterface 处理来自本机应用程序的数据。每个线程都有自己的 Lua 解释器实例。我使用Lua.GetFunction()从脚本中检索函数并定期调用该函数。我将字典传递给要处理的函数。这适用于一个线程。但是当我使用两个线程时,它会使整个应用程序崩溃,并且我在 Visual Studio 中看到如下错误:

The thread 'Win32 Thread' (0xa78) has exited with code -1073740791 (0xc0000409).

如果我将脚本更改为不使用我传递给它的字典的微不足道的事情,那么它也适用于多个线程。

我是否必须为每个解释器提供自己的进程或 AppDomain 才能完成这项工作?

4

3 回答 3

1

如果你试图从两个不同的线程调用同一个 Dictionary 对象,那么你就有了数据竞争。这样做是因为 Lua 脚本这样说还是因为 C# 代码试图这样做并不重要。这仍然是一个竞赛条件。如果该 Dictionary 不是线程安全的,则可能会导致错误。

因此,您要么需要为此对象提供线程安全的访问器,要么不需要从两个线程访问同一个对象。这与 Lua 没有任何关系。这只是基本的多线程。

于 2011-11-15T22:08:43.357 回答
1

LuaInterface 不是线程安全的。从我读过的内容来看,Lua 本身似乎支持多线程(参见Lua Lanes)。然而,LuaInterface(v2.0.3.7)在线程安全之前仍有一些问题需要解决。将 Lua 解释器的单独实例放在它们自己的线程中并不能解决这些问题。

于 2011-11-19T03:35:05.417 回答
0

脚本对字典做了什么?这是相关的,因为字典类不是线程安全的。

比如说,如果字典在一个线程中更改,而另一个线程枚举它,则该线程将崩溃。

于 2011-11-15T22:08:29.783 回答