GIL
dengzedong
2025-04-24 4fa2589807e4ab70680acaf5fe072e3944fddcf6
GIL
已修改1个文件
27 ■■■■■ 文件已修改
iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/IAIL.MDK.Midware/include/PyGILThreadLock.h 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/IAIL.MDK.Midware/include/PyGILThreadLock.h
@@ -16,32 +16,25 @@
public:
    PyGILThreadLock()
    {
        _save = NULL;
        nStatus = 0;
        nStatus = PyGILState_Check();   //检测当前线程是否拥有GIL
        //PyGILState_STATE gstate;
        if (!nStatus)
        m_acquired = false;
        //检测当前线程是否拥有GIL
        if (!PyGILState_Check())
        {
            cout << "申请获取GIL" << endl;
            gstate = PyGILState_Ensure();   //如果没有GIL,则申请获取GIL
            nStatus = 1;
            cout << "load GIL" << endl;
            m_gil_state  = PyGILState_Ensure();   //如果没有GIL,则申请获取GIL
            m_gil_state = true;
        }
        _save = PyEval_SaveThread();
        PyEval_RestoreThread(_save);
    }
    ~PyGILThreadLock()
    {
        _save = PyEval_SaveThread();
        PyEval_RestoreThread(_save);
        if (nStatus)
        if (m_acquired)
        {
            cout << "释放当前线程的GIL" << endl;
            cout << "reload GIL" << endl;
            PyGILState_Release(gstate);    //释放当前线程的GIL
        }
    }
private:
    PyGILState_STATE gstate;
    PyThreadState *_save;
    int nStatus;
    PyGILState_STATE m_gil_state;
    bool m_acquired;
};