問題タブ [concurrent-queue]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ConcurrentQueue.Count を整数と比較すると、間違った結果が返される
私は通常のリーダー/ライター機能を、キューに入れる 1 つのメイン スレッドとキューから取り出す複数のスレッドを使って書いています。そのため、アイテムの数を整数と比較しているコードの一部がありますConcurrentQueue
。これを「maxSize」と呼びましょう。が1.Count
を返し、maxSizeが 10 であるにもかかわらず、true を返します。queue.Count >= maxSize
ブレークポイントを使用してデバッグし、デキュー スレッドを 1 つだけ設定して、一時停止しようとしました。これは、メイン スレッドがエンキューされた直後に発生し、数行のコードの後、この比較により 1 >= 10 という結果が返されます。この時点でメイン スレッドがアイテムを 1 つだけ配置すると確信しています。noDequeue()
が呼び出されたことは確かです。また、ロックを再確認しようとしましたが、解決しない場合もあります。デバッガーで 1 >= 10 がtrueであることを確認すると、引き裂かれるからです。
絶望してログを追加しましたが、単体テスト中にロックステートメント内でも問題が再現可能であることがわかりました。