Почему CompareAndSwap является более мощной инструкцией, чем TestAndSet?

Пожалуйста, рассмотрите следующий фрагмент кода для CompareAndSwap и дайте мне знать, почему эта атомарная инструкция является более мощной, чем атомарный TestAndSet для того, чтобы быть примитивом взаимного исключения?

char CompareAndSwap(int *ptr, int old, int new) {
unsigned char ret;
// Note that sete sets a ’byte’ not the word
__asm__ __volatile__ (
" lock\n"
" cmpxchgl %2,%1\n"
" sete %0\n"
: "=q" (ret), "=m" (*ptr)
: "r" (new), "m" (*ptr), "a" (old)
: "memory");
return ret;
}

1 ответ

test-and-set изменяет содержимое ячейки памяти и возвращает ее старое значение в виде одной атомарной операции.

Операция сравнения и замены атомарно сравнивает содержимое области памяти с заданным значением и, только если они совпадают, изменяет содержимое этой области памяти до заданного нового значения.

Другие вопросы по тегам