首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LuaInterface多线程崩溃

LuaInterface多线程崩溃
EN

Stack Overflow用户
提问于 2011-11-16 06:02:05
回答 3查看 594关注 0票数 1

有没有一种方法可以让LuaInterface在多线程环境中工作?

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

代码语言:javascript
复制
The thread 'Win32 Thread' (0xa78) has exited with code -1073740791 (0xc0000409).

如果我更改脚本来做一些琐碎的事情,而不使用我传递给它的Dictionary,那么它也可以很好地与多线程一起工作。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-19 11:35:05

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

票数 1
EN

Stack Overflow用户

发布于 2011-11-16 06:08:43

如果您试图从两个不同的线程调用相同的Dictionary对象,那么就会有一场数据竞赛。不管它是因为Lua脚本这么说,还是因为C#代码试图这样做,都无关紧要。这仍然是一个竞争条件。如果该Dictionary不是线程安全的,那么就会导致糟糕的结果。

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

票数 1
EN

Stack Overflow用户

发布于 2011-11-16 06:08:30

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8143779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档