C++ Atomic Compare_exchange_weak завершается успешно во второй раз, хотя я не ожидал изменений?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++ Atomic Compare_exchange_weak завершается успешно во второй раз, хотя я не ожидал изменений?

Сообщение Anonymous »

Когда я использовал эту функцию, произошло что-то такое, что мне было трудно понять
Код:

Код: Выделить всё

#include
#include
int main()
{
std::atomic_size_t example;
size_t expect = 1000;
example.store(100, std::memory_order_release);
//Now example.load() is 100;
auto result = example.compare_exchange_weak(expect, 50, std::memory_order_relaxed);
//Now result is zero(false) and example.load() is 100,I knew it would.
result = example.compare_exchange_weak(expect, 50, std::memory_order_relaxed);
//But now !!! result is One(true)! and example.load() is 50 Why???
}
Что происходит после выполнения функции? Почему эти два исполнения отличаются?
Я не могу понять, почему это произошло, поэтому очень надеюсь, что вы ответите на мой вопрос. Большое вам спасибо.
Я усовершенствовал этот код , и теперь он компилируется и выполняется правильно, это всего лишь один поток.

Подробнее здесь: https://stackoverflow.com/questions/630 ... h-i-havent
Ответить

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

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

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

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

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