2016-03-24 5 views
2

すべてのpythonスレッド(CPython内)はGILの下にあります。ctypesで作成されたスレッドは、PythonのGILの下にもありますか?

スレッドが​​で作成された場合はどうなりますか?

例えば、pythonはC Libraryで以下の関数を呼び出し、関数はCの領域ではなくpythonを作成します。

#include<thread> 
int createUnitTestThread(int sasAddr){ 
    sasEngine->thread = new std::thread(....); 
    return 0; 
} 

これは同じかどうかですか?

答えて

2

スレッドはGILの下にあります。Pythonインタープリタの操作は(ほとんどのオペコードのフェッチと実行のようなものを含んでいるため、Pythonコードを実行するスレッドは主にインターロックされています)。

あなたのC++スレッドは、Pythonインタプリタ(ユーザーコールバックやPython.hからの関数のいずれか)の関数をコールバックしない限り、フリーで実行されます。

+0

ありがとうございました!もう1つの疑問は、 'C++スレッド 'が' GIL'の中にいなくても、同じ 'PID'を持つ' python interpreter'で動いているのですか? – SangminKim

+0

あなたが明示的に何とか登録しない限り、PythonがPythonで作成されていないスレッドからPythonを呼び出すとBad Things™が発生することは間違いありません。 – o11c

+0

@asleea:スレッドである、はい(Linuxでは、すべてが実際にはタスクであるため、少し混乱しているので、別のプロセスIDを持っていると言えるかもしれませんが)。 –

関連する問題