正直なところ、私は何も理解していないので、私はcompare_and_swapを解析しようとしています。
do { while (compare_and_swap(&lock, 0, 1) != 0)
; /* do nothing */
/* critical section */
lock = 0;
/* remainder section */
} while (true);
int compare and swap(int *value, int expected, int new_value) {
int temp = *value;
if (*value == expected)
*value = new_value;
return temp;
}
lock が 0 に設定されていると仮定しましょう。
1 つ目: コンペア アンド スワップは 0 を返し、ロックは 1 に設定され、クリティカル セクションは実行され、ロックは 0 に設定されます。
すすいで繰り返す
うまく解析できたかどうかはわかりませんが、compare and swap が test_and_set よりも 1 サイクル少ないサイクルで同じことを実行できる可能性はありますか (スレッドの同時実行性を保証します)?