0
S1: Lookup for some input data
S2:  IF not found SET IT
S3:  INSERT DATA
S4:  ELSE RETURN

最初はデータは保存されていません。2 つのスレッドが同じ入力データを同時にルックアップすると、ルックアップは両方のケースで FALSE を返します。その後、両方とも長い SET フェーズを通過します。最後に、同期されていない Insert メソッド内のシングルトン サービス Thread Inserts エントリ。

このように、ルックアップは同じデータが 2 回出ないようにするためのものでしたが、同じデータに対して 2 つのスレッドが動作するため、その目的は解決されませんでした。マルチスレッドプログラムでこのような状況を処理するにはどうすればよいですか?

4

2 に答える 2

1

データベースを扱っている場合、探しているキーワードは upsertです

通常のコーディングの場合、アトミックまたはおそらく同期が必要になる場合があります。

質問を明確にしていただければ、さらにお役に立てるかもしれません。

于 2013-02-25T23:12:11.500 に答える
0

ダブルチェック ロックが適用されました:

S1: Lookup for some input data
S2:  IF not found {
       synchronized(getClass()) {
S2-1:    Lookup for some input data
S2-2:    IF not found
S2-3:    INSERT DATA
       }
S3:  RETURN result of S1, S2-1, or S2-3
于 2013-02-26T01:05:33.140 に答える