我有一個主程序(在C)需要分支到lua_thread(主要繼續運行)。這個lua_thread調用一個lua_script.lua。這個lua_script包含一個while循環。一個lua變量控制着這個while循環。目前這個循環永遠運行。更改lua變量從C
lua_script.lua
--this loop runs forever, as the exit value is not set yet
a=0
while(a<=0)
do
print("value of a:", a)
end
我的目標是此LUA變量(a)由主程序,使得其退出該無限循環變化。一旦這個循環結束,它退出線程並返回到主程序。
的main.c
#include <lua.h>
#include <lauxlib.h>
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
void *lua_thread()
{
int status, result;
double sum;
lua_State *L;
L = luaL_newstate();
luaL_openlibs(L);
status = luaL_loadfile(L, "lua_script.lua");
if (status)
{
fprintf(stderr, "Couldn't load file: %s\n", lua_tostring(L, -1));
exit(1);
}
result = lua_pcall(L, 0, 0, 0);
if (result) {
fprintf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
exit(1);
}
lua_close(L);
return 0;
}
int main(void)
{
pthread_t p1;
pthread_create(&p1,NULL,lua_thread,NULL);
pthread_join(p1,NULL);
return 0;
}
如果你運行上面的代碼
cc -o xcute main.c -I/usr/include/lua5.2 -llua -lm -ldl -pthread
將進入一個無限循環。我想以某種方式控制lua變量,並將其從主程序中更改爲a = 1,以使其從無限循環中出來。做這樣一個測試的原因是它會確保在主程序退出之前,這個線程首先通過控制lua變量退出。 請建議如何改變這個lua變量,以便它退出while循環。
AFAIK Lua不是線程安全的 - 也就是說,每個lua_State一次只能從一個線程使用。 – immibis