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 つのスレッドが動作するため、その目的は解決されませんでした。マルチスレッドプログラムでこのような状況を処理するにはどうすればよいですか?