GIL
dengzedong
2 天以前 4fa2589807e4ab70680acaf5fe072e3944fddcf6
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;
};