Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
1

Расположение барьеров памяти в std::atomic

27.02.2017, 14:58. Показов 2929. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Допустим есть код
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <atomic>
 
int main()
{
    std::atomic<int> a;
    a.store (1, std::memory_order_relaxed);
}
Мне интересно, где будет расположен этот барьер? Перед какой операцией?
Пока у меня два варианта:
1. Перед операцией сохранения
2. После операции сохранения

То есть где-то под капотом идет процесс сохранения и вот мне интересно где располагается указанный барьер memory_order_relaxed. До или после сохранения.
Вот тут не нашел https://gcc.gnu.org/onlinedocs... ource.html

Добавлено через 6 минут
Тоже самое интересно в отношении чтения
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <atomic>
 
int main()
{
    std::atomic<int> a;
    a.store (1, std::memory_order_relaxed);
    std::cout << a.load(std::memory_order_seq_cst);//где барьер? до или после чтения?
}
Добавлено через 21 минуту
И еще интересно, эти барьеры действуют только внутри скоупа вызовов store и load или так же на скоуп вызывающей стороны?

Добавлено через 28 минут
Кажется разобрался. Как не странно, барьер находится там где он находится ))
Допустим
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <atomic>
 
int main()
{
    std::atomic<int> a;
    int n = load();//returns 1
    a.store (n, std::memory_order_release);
}
memory_order_release гарантирует что все операции (чтение и запись) идущие до барьера будут выполнены до всех операций записи после барьера
То есть это означает, что в данном примере при выполнении a.store (n, std::memory_order_release); переменная n железно будет равна единице. Вроде как-то так

Добавлено через 6 минут
Цитата Сообщение от sys_beginner Посмотреть сообщение
int n = load();//returns 1 or other value written by other thread
...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2017, 14:58
Ответы с готовыми решениями:

Std::atomic vs std::mutex
class AtomicSome { private: std::atomic_bool _isReady; //not std::atomic_flag ...

Стоит ли использовать std::atomic?
Доброго времени суток. Есть переменная в &quot;поток 2&quot; (назовем так) const volatile bool...

Std::atomic выбор конструктора
недавно коллега вкомитил строчку вроде этой std::atomic&lt;int&gt; at = 3; вкоммитил с чистой душой,...

Пример о необходимости std::atomic
Изучаю std::atomic. Пытаюсь сделать пример, при котором приложение упадет, без использование...

7
329 / 149 / 33
Регистрация: 29.06.2019
Сообщений: 1,429
17.07.2020, 14:24 2
Цитата Сообщение от Undisputed Посмотреть сообщение
Как не странно, барьер находится там где он находится
ну как бы да - где вы его поставите...
вроде видела, что с чтением зависит от ситуации... а с записью - надо обязательно ставить ДО записи
0
Undisputed
17.07.2020, 14:34  [ТС]
  #3

Не по теме:

Сегодня день апов моих старых тем? :) Уже вторая тема апнута которая была поднята более трех лет назад... ))

0
Annemesski
17.07.2020, 14:40
  #4

Не по теме:

Цитата Сообщение от Undisputed Посмотреть сообщение
Сегодня день апов моих старых тем? :) Уже вторая тема апнута которая была поднята более трех лет назад... ))
К нам сегодня приходил
Старый некропостофил
И принес с собой игрушек
Из сушеных трольих ушек

0
Неэпический
18106 / 10693 / 2062
Регистрация: 27.09.2012
Сообщений: 26,918
Записей в блоге: 1
17.07.2020, 19:01 5
Annemesski,
0
319 / 216 / 114
Регистрация: 14.05.2020
Сообщений: 890
17.07.2020, 19:05 6
Annemesski,
0
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
17.07.2020, 19:16 7
Annemesski,
0
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
17.07.2020, 19:17 8
0
17.07.2020, 19:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.07.2020, 19:17
Помогаю со студенческими работами здесь

Std::atomic и другие объекты
Добрый день! Подскажите пожалуйста можно ли создать std::atomic&lt;std::vector&lt;int&gt; &gt; myvector;...

Std::atomic. Реализация свободного от блокировок стека
Всем привет. Читаю книгу Параллельное программирование на с++ в действии Энтони Уильямса, в ней он...

Велосипед вместо std::atomic на WinApi
Собственно сабж. Есть у меня задание и в нем приписка &quot;синхронизационная часть задачи должна...

Не устанавливается загрузчик Grub (*error* mixing atomic and non-atomic capable gpus)
Пытался установить вторую ос (android Phoenix OS) на ноутбук acer E5-552G (x64, win10, efi, gpt),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru