我有一个程序,它使用lua_pcall对Lua脚本执行非常快的调用。似乎如果程序调用lua脚本太快,事情就会搞砸,并在最随机的地方导致访问冲突。
我尝试了互斥,甚至用try/catch启用了SEH异常,但都无济于事。错误函数已经就位,我正在检查所有适当的返回代码;问题是pcall内部的实际访问冲突,而不是安全处理的Lua错误。
很多时候,中断发生在luaV_execute中,但有时也会出现在其他随机的地方。我已经检查以确保所有推送到堆栈的参数都是有效的。
有没有办法强制Lua在返回前完成调用,或者确保调用堆栈不会被破坏?
发布于 2012-11-28 22:14:38
尽管Lua系统作为一个整体是完全可重入的,但是单个lua_State实例本身并不是线程安全的。
如果从多个线程访问lua_State,则应该使用互斥或其他锁定机制来确保一次只有一个线程可以操作该状态。并发访问很容易导致您所看到的那种损坏。
如果您正在处理多个lua_State实例,那么每个状态都可以有自己的访问锁;您不需要为整个Lua运行时设置一个全局锁。
https://stackoverflow.com/questions/13606066
复制相似问题