0

Python条件変数を呼び出すwait()と、呼び出し元のスレッドは実行を一時停止してyieldしますか、それとも次のコンテキストスイッチまでブロックし続けますか?

4

2 に答える 2

2

スレッドは降伏します。この降伏は、の実装pthread_cond_waitまたは同等のサスペンションメカニズムによるものPyThread_acquire_lockです。条件変数はシステムコールインターフェイスを使用して実装され、Pythonはネイティブスレッドを使用するため、オペレーティングシステムスケジューラが別のスレッドへの切り替えを担当します。

さらに、GILは、これをPythonの内部に深く呼び出す前にリリースされます。最後に、パズルの最後のピースは、ロックインを取得するための呼び出しthreading.Condition.waitです。

于 2011-08-10T14:39:19.623 に答える
1

wait()メソッドはロックを解放し、別のスレッドで同じ条件変数に対するnotify()またはnotifyAll()呼び出しによってロックが解除されるまでブロックします。目覚めたら、ロックを再取得して戻ります。タイムアウトを指定することもできます。

状態が通知されるまでブロックします。

于 2011-08-10T13:53:58.510 に答える