Я прочитал https://en.cppreference.com/w/cpp/atomi ... e_exchange
Атомически сравнивает представление объекта (до C ++ 20)
prevation (с момента C ++) из *это с ожидаемым, и если
read-modify-write write write). В противном случае загружает фактическое значение, сохраненное
в *это в ожидаемое (выполняет операцию нагрузки). < /P>
< /blockquote>
Так что, как я понимаю код, как < /p>
bool expected=true;
extern atomic b = false;
void foo ()
{
//
while(!b.compare_exchange_weak(expected, false));
//
}
После того, как цикл будет работать один раз (игнорирование ложного сбоя), он потерпит неудачу, и написать в ожидаемый false , поэтому во второй итерации compare_exchange_weak вернет успех, хотя b не изменился в True. Но какой смысл всего этого? Хотя я мог бы использовать это в качестве блокировки для синхронизации, ожидая, когда другой поток изменит b , но теперь я не могу придумать использование этого.#include
#include
std::atomic ai;
int tst_val= 4;
int new_val= 5;
bool exchanged= false;
void valsout()
{
std::cout
Подробнее здесь: https://stackoverflow.com/questions/664 ... ompare-exc