私は現在、FIFOキューを持つスレッドを開始するプログラムを持っています。キューは常にデータをキューに入れており、キューからアイテムを取得する方法があります。メソッドはロックを取得し、アイテムを取得するとロックを解放します。同時にキューに入れて入れられますか?
私の質問は、今後キューに入れて同時に待ち合わせる際に問題に直面しますか?データをキューに入れるときにロックを追加する必要はありますか?
ありがとうございました。
私は現在、FIFOキューを持つスレッドを開始するプログラムを持っています。キューは常にデータをキューに入れており、キューからアイテムを取得する方法があります。メソッドはロックを取得し、アイテムを取得するとロックを解放します。同時にキューに入れて入れられますか?
私の質問は、今後キューに入れて同時に待ち合わせる際に問題に直面しますか?データをキューに入れるときにロックを追加する必要はありますか?
ありがとうございました。
Queue
タイプのコールは、デフォルトでget()
とput()
にブロックされています。したがって、get()
コールを行うと、コールをブロックし、アイテムがキューに入るのを待ちます。
put()
コールは、キューがいっぱいになるとブロックし、スロットを解放してアイテムを置くことができるまで待機します。
このデフォルト動作は、block=False
を使用するか、timeout
に正の整数を渡すことで変更できます。ブロッキングを無効にするかタイムアウトを設定すると、呼び出しは正常に実行され、失敗した場合(タイムアウト内にある場合)、いくつかの例外が発生します。
ブロッキングを無効にすると、すぐにタイムアウト値の設定が失敗した場合、すぐに失敗します。
コールのデフォルトの性質はブロックされているため、問題は発生しません。ブロックを無効にしても、処理できるプログラムのフローを適切に制御できる例外があります。したがって、キューに同時にアクセスすることで、「同期」されているので、問題は発生しません。
ドキュメントに記載されているとおりです。*キューモジュールのQueueクラスは、必要なすべてのロックセマンティクス*を実装しています。そうではありませんが、どのような問題に遭遇して待ち行列に入るかはわかりません。あなたのコードを追加すると、ポイント情報をさらに提供することができます。 –