有没有办法让LuaInterface在多线程环境中工作?
我有一个多线程c#(。Net 4)程序集,它使用LuaInterface处理来自本机应用程序的数据。每个线程都有自己的Lua解释器实例。我使用Lua.GetFunction()
从脚本中检索函数并定期调用该函数。我将一个Dictionary传递给要处理的函数。这适用于一个线程。但是,当我使用两个线程时,它会崩溃整个应用程序,我在visual studio中看到如下错误:
The thread 'Win32 Thread' (0xa78) has exited with code -1073740791 (0xc0000409).
如果我更改脚本以执行一些微不足道的事情,它不会使用我传递给它的词典,那么它也适用于多个线程。
我是否必须为每个解释器提供自己的进程或AppDomain才能使其工作?
答案 0 :(得分:1)
如果您尝试从两个不同的线程调用相同的Dictionary对象,那么您将进行数据竞争。它是否正在执行它并不重要,因为Lua脚本这样说或者因为C#代码试图这样做。这仍然是一个竞争条件。如果该词典不是线程安全的,那么就会导致不良。
因此,您需要为此对象提供线程安全访问器,或者您需要不从两个线程访问同一对象。这与Lua没有任何关系;它只是基本的多线程。
答案 1 :(得分:1)
LuaInterface不是线程安全的。从我所看到的Lua本身似乎支持多线程(见Lua Lanes)。但是,LuaInterface(v2.0.3.7)仍然有一些issues可以在线程安全之前解决。将Lua解释器的单独实例放在自己的线程中并不能解决这些问题。
答案 2 :(得分:0)
使用字典的脚本是什么?这是相关的,因为字典类不是线程安全的。
比如说,如果字典在一个线程中被更改而另一个线程枚举它,则该线程将崩溃。