Python のスレッドセーフQueue
オブジェクトにはQueue.full()
、次のドキュメントで名前が付けられた便利な関数があります。
キューがいっぱいの場合は True を返し、それ以外の場合は False を返します。full() が True を返す場合、その後の get() の呼び出しがブロックされないという保証はありません。同様に、full() が False を返す場合、その後の put() の呼び出しがブロックされないという保証はありません。
put()
キュー内の複数のスレッド項目と複数のスレッド項目があるマルチスレッド シナリオでget()
は、競合状態が発生することは明らかです。しかし、1 つのスレッドだけが を使用しput()
、1 つの異なるスレッドが を使用しget()
ている場合、 の値はfull()
信頼できませんか?
これは Python 実装固有の質問ですか? もしそうなら、CPythonの答えは何ですか?