Вопросы по теме 'memory-barriers'

Использование барьера памяти в безблокировочных очередях
Недавно я прочитал официальный документ Пола Маккенни за 2010 г., " Барьеры памяти: взгляд на оборудование для программных хакеров " . Я был бы очень признателен за некоторые отзывы / комментарии / рекомендации относительно небольших разделов кода...
1463 просмотров

какова цель барьера компилятора?
Следующее извлечено из Параллельное программирование в Windows , Глава 10 Страница 528 ~ 529, шаблон c ++ Реализация двойной проверки T getValue(){ if (!m_pValue){ EnterCriticalSection(&m_crst); if (! m_pValue){...
3945 просмотров

Последовательно ли согласован std :: mutex?
Скажем, у меня есть два потока A и B , записывающих в глобальные логические переменные fA и fB соответственно, которые изначально установлены на false и защищены std::mutex объектами mA и mB соответственно: // Thread A mA.lock();...
1868 просмотров

Семантика получения / выпуска с 4 потоками
В настоящее время я читаю C ++ Concurrency in Action Энтони Уильямса. В одном из его листинга показан этот код, и он заявляет, что утверждение, что z != 0 может срабатывать. #include <atomic> #include <thread> #include...
1908 просмотров

Упорядочивание неатомарных операций посредством использования атомарных операций в качестве основы для средств синхронизации более высокого уровня
Сначала я процитирую описание из книги Энтони Уильямса «Параллелизм в C ++ в действии»: class spinlock_mutex { std::atomic_flag flag; public: spinlock_mutex(): flag(ATOMIC_FLAG_INIT) {} void lock() {...
119 просмотров

Как функции блокировки и разблокировки мьютекса предотвращают переупорядочение ЦП?
Насколько мне известно, вызов функции действует как барьер компилятора, но не как барьер процессора. В этом руководстве говорится следующее: получение блокировки подразумевает семантику получения, в то время как снятие блокировки...
1407 просмотров
schedule 05.11.2021

Предотвращение появления значений Out of Thin Air с барьером памяти в C ++
Давайте рассмотрим следующую двухпотоковую параллельную программу на C ++: x,y - глобальные, r1,r2 - локальные для потока, store и от load до int - атомарные. Модель памяти = C ++ 11 int x = 0, int y = 0 r1 = x | r2 = y y = r1 |...
669 просмотров
schedule 14.09.2021

Эффект / заполнение std :: memory_order_ * на x86 (-64)
У меня такой код: #include <cstdint> #include <atomic> void myAtomicStore(std::atomic<int32_t>& i, const int32_t v) { i.store(v, std::memory_order_release); } int myAtomicLoad(std::atomic<int32_t>& i, const...
61 просмотров
schedule 14.11.2021

Простая программа на C для иллюстрации выполнения вне очереди?
Я использую x86, и я хочу практически увидеть ошибку, вызванную некорректным выполнением на моей машине. Я попытался написать один, на основе этой статьи в вики , но я всегда вижу, что «значение x равно 33 ": #include<stdio.h>...
667 просмотров
schedule 19.11.2021

Какая связь между согласованностью кеша и барьерами памяти?
Насколько мне известно, барьеры памяти используются, чтобы избежать выполнения вне очереди . Тем не менее, барьеры памяти часто упоминаются также, когда говорят о согласованности кеша. Я не уверен, как связаны эти две концепции, поскольку,...
176 просмотров

Для чего в Java используются ограждения памяти?
Пытаясь понять, как SubmissionPublisher ( исходный код в Java SE 10, OpenJDK | docs ), новый класс, добавленный в Java SE в версии 9, был реализован, я наткнулся на несколько вызовов API на _ 2_ Раньше я не знал: fullFence , acquireFence ,...
715 просмотров

Могу ли я изменить данные с помощью std :: shared_lock на std :: shared_mutex?
У меня есть несколько буферов, совместно используемых несколькими потоками чтения / записи, и разные писатели изменяют данные по-разному. Например, Writer1 просто добавляет новые данные, а Writer2 увеличивает размер буфера (перераспределяет память...
67 просмотров

Барьер памяти на одноядерном ARM
О барьерах памяти связано много информации. Большая часть информации относится к многоядерным или многопроцессорным архитектурам. Где-то здесь, в Stackoverflow, также говорится, что барьеры памяти не требуются на одноядерных процессорах. Пока я...
2992 просмотров
schedule 23.02.2022

Какие предположения должен делать код о модели памяти ЦП и как такие предположения должны быть задокументированы?
Из того, что я читал, архитектуры процессоров Intel обеспечивают более сильную модель памяти, чем требуется в реализациях .net. Насколько правильно для кода использовать гарантии, предоставляемые процессорами Intel, или в какой степени код должен...
203 просмотров

Всегда ли для спин-блокировок требуется барьер памяти? Дорогое вращение на барьере памяти?
Я написал код без блокировки, который отлично работает с локальным чтением в большинстве условий. Обязательно ли локальное вращение при чтении памяти означает, что я должен ВСЕГДА вставлять барьер памяти перед вращением чтения? (Чтобы проверить...
4731 просмотров

Достаточно ли std::memory_order_relaxed для проверки доступности?
У меня есть параллельный объект, который может или может содержать указатель на функцию каждый раз. Схема объекта выглядит так: struct ConcurrentObject{ //variables std::atomic<void(*)()> callback; } поэтому один поток может...
213 просмотров

Переключение контекста и выполнение потоков на разных ядрах ЦП
Из моего другого вопроса о SO я узнал, что возможно, что следующий простой метод void B() { if (_complete) { Console.WriteLine (_answer); } } может выполняться на разных процессорах, если переключение контекста...
911 просмотров

Барьеры памяти и спин-блокировка ядра Linux на TILE-Gx
В реализации спин-блокировки ядра Linux для архитектуры TILE-Gx похоже, что они не создают никаких барьеров памяти при блокировке (только при разблокировке): https://github.com/torvalds/linux/blob/master/arch/tile/include/asm/spinlock_64.h...
1119 просмотров

Неустойчивые операции чтения / записи и упорядочение потоков.
Я пытаюсь обдумать тонкости, связанные с барьерами памяти и изменчивыми операциями чтения / записи. Я читаю здесь статью Джозефа Альбахари: http://www.albahari.com/threading/part4.aspx И спотыкаясь о том, когда нужен барьер памяти перед...
425 просмотров
schedule 28.03.2022

Что означает операция сериализации в документации sfence?
В документации для sfence говорится: Выполняет операцию сериализации для всех инструкций сохранения в памяти, которые были выполнены до инструкции SFENCE. Что означает «операция сериализации»? Означает ли это, что убедитесь, что...
1298 просмотров
schedule 05.04.2022