Может ли оборудование переупорядочить атомную нагрузку с последующей атомной хранилищем, если хранилище является условным на нагрузке? It would be highly unintuitive if this could happen, because if thread1 speculatively due to branch prediction, or for whatever reason, writes y = 1 before the condition in the if statement is confirmed as true, then if it later finds out the condition resolves to false, there is no way to undo the damage (roll back the changes), because another thread may have already read the updated value of y!
Я не думаю, что выпуск и приобретение семантики поможет в этом случае. Std :: memory_order_release on y.store () будет использоваться для выполнения более ранних записей, видимых в другие потоки, которые видели значение y , но в этом случае ничто не может сделать, чтобы повлиять на видимость x в других потоках, потому что x не было написано по потоке1. Примеры, которые я видел в документации C ++ для получения семантики приобретения и выпуска только о паре потоков, где один из них является чисто автором, а другой-чисто читатель.std::atomic x;
std::atomic y;
void thread1() {
int val = x.load(std::memory_order_relaxed);
if( val == 42 ){
y.store(1, std::memory_order_relaxed);
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... f-the-stor
Может ли оборудование изменить порядок атомной нагрузки, за которой следует атомный магазин, если хранилище условно подх ⇐ C++
Программы на C++. Форум разработчиков
1755291289
Anonymous
Может ли оборудование переупорядочить атомную нагрузку с последующей атомной хранилищем, если хранилище является условным на нагрузке? It would be highly unintuitive if this could happen, because if thread1 speculatively due to branch prediction, or for whatever reason, writes y = 1 before the condition in the if statement is confirmed as true, then if it later finds out the condition resolves to false, there is no way to undo the damage (roll back the changes), because another thread may have already read the updated value of y!
Я не думаю, что выпуск и приобретение семантики поможет в этом случае. Std :: memory_order_release on y.store () будет использоваться для выполнения более ранних записей, видимых в другие потоки, которые видели значение y , но в этом случае ничто не может сделать, чтобы повлиять на видимость x в других потоках, потому что x не было написано по потоке1. Примеры, которые я видел в документации C ++ для получения семантики приобретения и выпуска только о паре потоков, где один из них является чисто автором, а другой-чисто читатель.std::atomic x;
std::atomic y;
void thread1() {
int val = x.load(std::memory_order_relaxed);
if( val == 42 ){
y.store(1, std::memory_order_relaxed);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79736826/can-the-hardware-reorder-an-atomic-load-followed-by-an-atomic-store-if-the-stor[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия