擅长:python、mysql、java
<p>是的,但我觉得我的部分有点可疑。在</p>
<p>我必须在初始化解释器时保存PyThreadState,并在完成解释器时将其交换回原处(不知道为什么我需要一个特定的ThreadState来调用Finalize-难道每个状态都能正常工作吗?)在</p>
<p>不管怎样,如果其他人遇到同样的问题:</p>
<pre><code>PyThreadState *mainstate;
void initPython(){
PyEval_InitThreads();
Py_Initialize();
mainstate = PyThreadState_Swap(NULL);
PyEval_ReleaseLock();
}
void exitPython(){
PyEval_AcquireLock();
PyThreadState_Swap(mainstate);
Py_Finalize();
}
</code></pre>
<p>唯一的问题是,我可以像其他线程一样获得锁,即使仍然有线程在工作。
API没有提到在其他线程仍在工作时调用Finalize()时会发生什么。听起来是种族状况的完美例子。。在</p>