На самом деле не получайте логику std :: atomic :: compare_exchange_weak и compare_exchange_strongC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 На самом деле не получайте логику std :: atomic :: compare_exchange_weak и compare_exchange_strong

Сообщение Anonymous »

Я прочитал 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»