gpt4 book ai didi

c - 如何在多个Lua State(多线程)之间传递数据?

转载 作者:IT王子 更新时间:2023-10-29 06:00:35 24 4
gpt4 key购买 nike

我在redis.lua中启动Redis连接池,通过从C调用,我得到了一个redis_lua_state,这个Lua状态是全局启动一次,其他线程只有从中得到

虽然有一个 HTTP 请求(工作线程),我需要从 redis_lua_state 获取一个 redis 连接,然后新建另一个 Lua 状态来加载其他 Lua 脚本,这些脚本将使用这个 redis 连接与 Redis 通信,该怎么做?或者如何设计我的 Lua 脚本以使其变得简单?


代码示例:

    /* on main thread, to init redis pool connection */
lua_State *g_ls = NULL;
lua_State *init_redis_pool(void) {
int ret = 0;
g_ls = luaL_newstate();
lua_State *ls = g_ls;

luaL_openlibs(ls);
ret = luaL_loadfile(ls, "redis.lua");
const char *err;
(void)err;

/* preload */
ret = lua_pcall(ls, 0, 0, 0);

lua_getglobal(ls, "init_redis_pool");
ret = lua_pcall(ls, 0, 0, 0);

return ls;
}

/* worker thread */
int worker() {
...
lua_State *ls = luaL_newstate();
ret = luaL_loadfile(ls, "run.lua");

/* How to fetch data from g_ls? */
...
lua_getglobal(ls, "run")
ret = lua_pcall(ls, 0, 0, 0)

lua_close(ls);
...
return 0;
}

最佳答案

如果您的 Lua 状态是独立的,则无法执行此操作。您的工作线程将必须初始化 Redis 连接对其进行处理。

关于c - 如何在多个Lua State(多线程)之间传递数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16453654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com