Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Undisputed
212 / 140 / 38
Регистрация: 10.06.2014
Сообщений: 1,698
Завершенные тесты: 3
1

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

27.02.2017, 14:58. Просмотров 277. Ответов 0
Метки нет (Все метки)

Допустим есть код
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/gcc-4...55_source.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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2017, 14:58
Ответы с готовыми решениями:

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

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

Std::atomic и другие объекты
Добрый день! Подскажите пожалуйста можно ли создать ...

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

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2017, 14:58

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

Распределитель памяти идентичный std::allocator. Непонятные синтаксис и концепция std::allocator::construct
Компилятор: MSVC 2010 Exress код моего класса распределяющего память под...

Ошибка terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc выделение памяти
Уважаемые форумчане! Работаю над программой обработки WAV файлов, но возникла...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru