我如何将主状态的全局变量或环境传递到 Lua lane 中?

作为在我的游戏服务器上测试 Lua Lanes 是否正常运行的测试,我正在尝试在新线程中使用主状态中的全局函数。不幸的是,这个特定的代码一直导致 tools.c 的第 1216 行中的“断言失败”错误。我正在尝试设置这个,以便我可以在不锁定主线程的情况下进行繁忙的工作,并最终在我的游戏服务器上运行我的脚本。也许有更好的方法来实现这个目的?或者也许我可以通过在我的服务器中使用 luaL_newthread(state) 来运行我的脚本?请指导我走向正确的方向,因为这目前正在阻止我的开发。提前感谢。

原文链接 https://stackoverflow.com/questions/10160793

点赞
stackoverflow用户221509
stackoverflow用户221509

你不应该在 lane 中访问全局变量。线程在一个单独的状态下运行,你得到的是全局表的一个深拷贝(而不是一个引用)。另外,通过在一个独立的线程中调用全局函数,你将冒着出现同步问题的风险。

你可以在线程本身中 require 一个模块来获取 broadcast 函数。你可以选择以下两种方式来做到这一点:

  1. broadcast 和其他函数放在一个模块中,并在线程中调用 require
  2. 在线程函数之前将 broadcast 存储为 local,以使其成为一个上值。

更新:不幸的是,第二种方法不再像以前那样有效。由于与 LuaJIT 2 的兼容性问题,Lanes 不得不在运行 configure计算本机函数的映射表。我没有找到一种方法来以其他方式传递一个简单的 C 函数到线程中,但实际上可以在线程中 require 模块。

2012-04-15 12:31:01