ある時点で条件をテストすることが意味があるかどうかによって異なります。ただし、問題は、ほとんどの場合、ブールテストが他のことを意味することです。これは、前の状態を表すという条件を読み終えるまでにすでに変更されている可能性があります。
考えてみてください。それが取るに足らないテストであるなら、それはほとんど意味がありません-そしてあなたはなぜそれを作っているのか疑問に思う必要があります。それが重要なテストである場合、それはもはや存在するかもしれないし存在しないかもしれないコヒーレント状態の物語です-あなたがそれをしない限り、あなたは確かにわかりませんlock
。
多くの場合、たとえばリアルタイムレポートでは、データベースがどのスナップショットを提供するかは気にせず、比較的最新のスナップショットが必要です。ただし、トランザクションロジックの一部として、コミット前の状況を完全に把握します。現在の状態が現在の状態であり、暫定的な状態にある状態でさえ明確な状態であるコードでこれを見つける可能性は低いと思います。
これが異なる可能性があるのは、キューへの周期的なアクセスだと思います。今回、1人の消費者がヘッドレコードを取得しなかった場合、次回はそのうちの1人がヘッドレコードを取得します。キューカウンターに非同期的にアクセスすることで、処理時間を節約できる可能性があります。しかし、これは、たった1回の反復のコンテキストではほとんど意味がない場合です。
上記の場合、テストでデータがあることが示唆されたとしても、キューが実際には空になる可能性があることを期待して、ロックレベルの命令を後で配置するだけです。したがって、それが単なる予備テストである場合は、テストを実際の信頼性の低いものとして扱うロジックが必要になります。