【问题标题】:Use thread local store lua_State使用线程本地存储 lua_State
【发布时间】:2015-01-06 03:06:01
【问题描述】:

我需要在IOCP中使用Lua,并使用Thread local Storage来存储lua_State *。我应该在线程销毁之前使用lua_close()销毁lua_State,但是工作线程是由IOCP创建的。

问题是什么时候打电话给lua_close合适?

static DWORD WINAPI work_thread_proc(void* parameter){
    lua_State * L = TlsGetValue(tls_lua_key);
    if(NULL = L){
          L=luaL_newstate();
          //DO some initialze for L...

          TlsSetValue(tls_lua_key,L);
    }

}


//..... other place call
QueueUserWorkItem(&work_thread_proc, req, WT_EXECUTELONGFUNCTION);

【问题讨论】:

    标签: lua thread-local iocp


    【解决方案1】:

    你可以这样使用它。

    __declspec(thread) lua_State *tls_LuaState = NULL;
    // close lua state on exit thread.
    void NTAPI TLS_CloseLuaState(PVOID module, DWORD reason, PVOID reserved)
    {
        if(NULL != ){
            lua_close(tls_LuaState);
        }
    }
    
    #pragma section(".CRT$XLB",long,read)
        __declspec(allocate(".CRT$XLB"))
            PIMAGE_TLS_CALLBACK p_thread_callback_base = TLS_CloseLuaState;
    

    【讨论】:

    • if(NULL != ){ is wronge ,你需要更改为 if(NULL != tls_LuaState)
    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2015-05-16
    • 1970-01-01
    相关资源
    最近更新 更多