Я прочитал 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
На самом деле не получайте логику std :: atomic :: compare_exchange_weak и compare_exchange_strong ⇐ C++
Программы на C++. Форум разработчиков
1755534887
Anonymous
Я прочитал https://en.cppreference.com/w/cpp/atomic/atomic/compare_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
Подробнее здесь: [url]https://stackoverflow.com/questions/66493926/dont-really-get-the-logic-of-stdatomiccompare-exchange-weak-and-compare-exc[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия