有没有一种方法可以让LuaInterface在多线程环境中工作?
我有一个多线程c# (.Net 4)程序集,它使用LuaInterface处理来自本机应用程序的数据。每个线程都有自己的Lua解释器实例。我使用Lua.GetFunction()从脚本中检索函数,并定期调用该函数。我将一个字典传递给要处理的函数。这对于一个线程来说工作得很好。但是当我使用两个线程时,它会使整个应用程序崩溃,并且我在visual studio中看到如下错误:
The thread 'Win32 Thread' (0xa78) has exited with code -1073740791 (0xc0000409).如果我更改脚本来做一些琐碎的事情,而不使用我传递给它的Dictionary,那么它也可以很好地与多线程一起工作。
我是否必须为每个解释器提供自己的进程或AppDomain才能使其工作?
发布于 2011-11-19 11:35:05
LuaInterface不是线程安全的。据我所知,Lua本身似乎支持多线程(参见Lua Lanes)。然而,在成为线程安全之前,LuaInterface(v2.0.3.7)仍有一些issues需要解决。将Lua解释器的单独实例放在它们自己的线程中并不能解决这些问题。
发布于 2011-11-16 06:08:43
如果您试图从两个不同的线程调用相同的Dictionary对象,那么就会有一场数据竞赛。不管它是因为Lua脚本这么说,还是因为C#代码试图这样做,都无关紧要。这仍然是一个竞争条件。如果该Dictionary不是线程安全的,那么就会导致糟糕的结果。
因此,要么需要为这个对象提供线程安全的访问器,要么不需要从两个线程访问同一个对象。这实际上与Lua没有任何关系;它只是基本的多线程。
发布于 2011-11-16 06:08:30
这个脚本对字典做了什么?这是相关的,因为字典类不是线程安全的。
比方说,如果在一个线程中更改了字典,而另一个线程枚举了它,则该线程将崩溃。
https://stackoverflow.com/questions/8143779
复制相似问题