Python条件変数を呼び出すwait()
と、呼び出し元のスレッドは実行を一時停止してyieldしますか、それとも次のコンテキストスイッチまでブロックし続けますか?
1537 次
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 に答える