LuaInterface 多线程崩溃问题

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

我有一个多线程c# (.Net 4)程序集,使用LuaInterface从原生应用程序中处理数据。每个线程都有自己的Lua解释器实例。我使用Lua.GetFunction()从脚本中检索函数并定期调用该函数。我传递一个Dictionary到函数中进行处理。这在单个线程上运行良好。但是,当我使用两个线程时,它会崩溃整个应用程序,并且在visual studio中会看到以下错误:

线程“Win32 Thread”(0xa78)已用代码-1073740791(0xc0000409)退出。

如果我将脚本更改为执行一些不使用我传递给它的Dictionary的事情,则使用多个线程也可以正常工作。

我是否需要为每个解释器提供自己的进程或AppDomain来使其工作?

原文链接 https://stackoverflow.com/questions/8143779

点赞
stackoverflow用户35245
stackoverflow用户35245

该脚本在字典中做了什么?这很重要,因为字典类不是线程安全的。

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

2011-11-15 22:08:29
stackoverflow用户734069
stackoverflow用户734069

如果您尝试从两个不同的线程调用同一字典对象,那么就会出现数据竞争。无论是因为Lua脚本这么做还是因为C#代码试图这么做,都是竞争条件。而且,如果该字典不是线程安全的,可能会导致问题。

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

2011-11-15 22:08:43
stackoverflow用户901304
stackoverflow用户901304

LuaInterface 不是线程安全的。从我所了解的来看,Lua本身似乎支持多线程(请参见 Lua Lanes)。然而,LuaInterface(v2.0.3.7)在变得线程安全之前仍存在一些 问题 。将 Lua 解释器的不同实例放置在它们自己的线程中无法解决这些问题。

2011-11-19 03:35:05