2016-08-13 9 views
0

私は現在、FIFOキューを持つスレッドを開始するプログラムを持っています。キューは常にデータをキューに入れており、キューからアイテムを取得する方法があります。メソッドはロックを取得し、アイテムを取得するとロックを解放します。同時にキューに入れて入れられますか?

私の質問は、今後キューに入れて同時に待ち合わせる際に問題に直面しますか?データをキューに入れるときにロックを追加する必要はありますか?

ありがとうございました。

+1

ドキュメントに記載されているとおりです。*キューモジュールのQueueクラスは、必要なすべてのロックセマンティクス*を実装しています。そうではありませんが、どのような問題に遭遇して待ち行列に入るかはわかりません。あなたのコードを追加すると、ポイント情報をさらに提供することができます。 –

答えて

1

Queueタイプのコールは、デフォルトでget()put()にブロックされています。したがって、get()コールを行うと、コールをブロックし、アイテムがキューに入るのを待ちます。

put()コールは、キューがいっぱいになるとブロックし、スロットを解放してアイテムを置くことができるまで待機します。

このデフォルト動作は、block=Falseを使用するか、timeoutに正の整数を渡すことで変更できます。ブロッキングを無効にするかタイムアウトを設定すると、呼び出しは正常に実行され、失敗した場合(タイムアウト内にある場合)、いくつかの例外が発生します。

ブロッキングを無効にすると、すぐにタイムアウト値の設定が失敗した場合、すぐに失敗します。

コールのデフォルトの性質はブロックされているため、問題は発生しません。ブロックを無効にしても、処理できるプログラムのフローを適切に制御できる例外があります。したがって、キューに同時にアクセスすることで、「同期」されているので、問題は発生しません。

関連する問題