独立した更新の同期

独立した更新パターンでは次のことが同時に起こります。

例えば、複数のタスクが do_something() を呼び出すことを想定します。

void do_something() { 
static bool initialized = false; 
     if (!initialized) { 
          do_the_initialization(); 
          initialized = true; 
     } 
     do_the_real_work(); 
}

関数 do_something() は、変数 initialized と初期化されたメモリー位置を更新します。do_the_real_work() は、初期化が行われる前に呼び出されることはありません。2 つのタスクが if 文を同時に実行しようとしない限り、どのタスクが do_something() を最初に呼び出したかにかかわらず初期化は一度だけ行われます。2 つのタスクが同時に if 文を実行すると、2 つのタスクは initialized が false であると認識して両方が初期化を行います。

次に示すセクションでは、明示的なロック、ロックの割り当て、および同期の使用に関する潜在的な問題を含む、独立した同期の更新におけるいくつかの振る舞いを示します。