Lua winapi 和线程同步

我正在尝试构建一个与管道一起工作的 Lua 模块。我正在考虑使用 Donovan 的 winapi 模块。问题在于我的 Lua 模块将插入到其他系统中,并通过回调方法像 OnEvent 这样被通知。然后它需要调用 getSomeData 来获取详细数据,然后我想通过命名管道将这些数据发送到我的 Java 程序(原始系统不支持插入 Java 或直接发送数据)。问题是,我如何确保我的 SomeData 在 winapi make_pipe_server 线程和我的 OnEvent 线程之间得到适当的同步。我需要进行特殊处理吗?因为从我读到的内容来看,Lua 线程不同于 OS/C/Java 线程,可能不需要同步? SomeData 不是原子性的,将包含约 10 行字符串数据。

点赞
用户2328287
用户2328287

你可以看到这个问题[1]。 此外,winapi使用全局静态缓冲区将字符串转换为多字节[2]。 因此,如果winapi使用它来打开管道,则此函数不是线程安全的。 当我在多线程环境(lua_State per os线程)中使用此函数时,我有问题watch_for_file_changes。 但是我没有使用管道。所以我认为你应该自己检查源代码。

[1] https://github.com/stevedonovan/winapi/issues/4 [2] https://github.com/stevedonovan/winapi/blob/master/winapi.c#L38

2014-08-04 09:03:09
用户3180894
用户3180894

Josh Simmons告诉我,有一个相当酷的ffi用于Lua: https://github.com/jmckaskill/luaffi (由James McKaskill编写)

我试过了,它可以与只使用标准的lua51.dll和自定义的ffi.dll作为常规Lua模块一起使用。

了不起的工作!

2014-08-06 07:48:49