/ / атомно сравнение без брави или mutex - c ++, сравни, атомно

атомно сравнение без брави или mutex - c ++, сравни, атомно

Опитвам се да направя упражнение, което използва атомни операции. Искам да направя сравнение между позицията на атомния масив и атомната интеграция 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 не-атомен стойност и го актуализира в зависимост от това сравнение. Не сравнява две атомни стойности.