Сравнение и замена библиотеки в C ++ объясняют (мне кажется, это не работает) - PullRequest
1 голос
/ 18 октября 2019

Когда я читаю орудие x86, функция сравнения и обмена выглядит так:

template <typename T>
bool compare_and_swap(T *dst, T exp, T desired)
{ // do atomically
 if (*dst == exp) {
   *dst = desired;
   return true;
 }
 return false;
}

Мне интересно, переходит ли более одного потока к if (*dst==exp), и с тех пор exp не был изменен, они могут одновременно передавать оператор if и выполнять *dst = desired. Мне интересно, если это так, почему эта функция будет работать? Кажется, что это не останавливает другой поток, чтобы изменить данные? Может кто-нибудь любезно рассказать, как работает эта функция?

...