Lua:避免pcall和Lua callstack超载

Qix*_*Qix 2 c++ lua callstack access-violation stack-corruption

我有一个程序,使用执行非常快节奏的Lua脚本调用lua_pcall.似乎程序调用lua脚本的速度太快,事情会崩溃并导致在最随机的地方发生访问冲突.

我尝试过互斥锁,甚至用try/catch启用SEH异常也无济于事.错误功能到位,我正在检查所有适当的返回代码; 问题是pcall内部的实际访问冲突,而不是安全处理的Lua错误.

很多时候中断发生luaV_execute,但有时它在其他随机的地方.我已经检查过以确保推送到堆栈的所有参数都有效.

有没有办法强制Lua在返回之前完成一个调用,或者某种方式确保调用堆栈不会被破坏?

Roo*_*ook 5

虽然Lua系统作为一个整体是完全可重入的,但个别lua_State实例本身并不是线程安全的.

如果lua_State从多个线程访问a ,则应使用互斥锁或其他锁定机制来确保一次只有一个线程可以操作该状态.同时访问很容易导致您看到的那种腐败.

如果您正在处理多个lua_State实例,则每个州都可以拥有自己的访问锁; 整个Lua运行时不需要单个全局锁.