Опитвам се да направя упражнение, което използва атомни операции. Искам да направя сравнение между позицията на атомния масив и атомната интеграция compare_exchange
.
Моят код е:
std::array<std::atomic<long int>, 20> xx;
std::atomic<long int> number;
Искам да правя:
if (xx[i] > number)
number = xx[i];
Как може да се използва compare_exchange_weak()
в моя случай? Видях много пъти http://en.cppreference.com/w/cpp/atomic/atomic но не го разбирам.
Отговори:
2 за отговор № 1Не можеш. std::atomic
позволява различни атомни операции на единичен обект. За да извършите атомна операция, включваща повече от един обект, ще ви е необходима заключване.
compare_exchange
, както ви описва връзката, атомно сравнява обекта за равенство с a не-атомен стойност и го актуализира в зависимост от това сравнение. Не сравнява две атомни стойности.