Описание тега memory-order

Для вопросов о моделях упорядочения памяти на уровне ISA или микроархитектуры.
2 ответа

Наименьшее ограничительное упорядочение памяти для спин-блокировки с двумя атомами

У меня есть несколько рабочих потоков, выполняющих критичную ко времени обработку через равные промежутки времени (около 1 кГц) Каждый цикл рабочие просыпаются, чтобы выполнить работу по дому, каждый из которых (в среднем) должен быть завершен до на…
02 фев '16 в 12:45
1 ответ

Порядок памяти в деструкторе разделяемого указателя

Я пытаюсь выяснить наиболее расслабленный (и правильный) порядок памяти для деструктора общего указателя. На данный момент я имею в виду следующее: ~shared_ptr() { if (p) { if (p->cnt.fetch_sub(1, std::memory_order_release) == 1) { p->cnt.load…
05 мар '18 в 14:30
1 ответ

Упорядочение памяти или операция чтения-изменения-записи с (только чтение / запись) только по памяти

Выполнение следующего является атомарной операцией RMW auto value = atomic.fetch_or(value, order); когда order является std::memory_order_acq_rel мы знаем, что загрузка предыдущего значения в элементарном режиме получит все операции освобождения, ко…
1 ответ

Понимание порядка памяти в C++

std::atomic<int> unique_ids; void foo() { int i = unique_ids.fetch_add(1, std::memory_order_relaxed); std::cout<<i; } int main(int argc, char* argv[]) { std::vector<std::thread> threads; for (int i = 0; i < 9; ++i) { threads.emp…
25 сен '16 в 14:25
3 ответа

Могут ли атомы пострадать от ложных магазинов?

В C++ атомы могут страдать от ложных хранилищ? Например, предположим, что m а также n атомные и что m = 5 первоначально. В теме 1 m += 2; В теме 2 n = m; Результат: окончательное значение n должно быть 5 или 7, верно? Но может ли это быть 6? Может л…
05 ноя '17 в 13:11
1 ответ

Потоково-локальная синхронизация получения / выпуска

В целом, синхронизация загрузки-накопления / освобождения-хранения является одной из наиболее распространенных форм синхронизации на основе упорядочения памяти в модели памяти C++11. Это в основном, как мьютекс обеспечивает упорядочение памяти. "Кри…
03 апр '18 в 17:12
1 ответ

Программирование без блокировки: переупорядочение и семантика порядка памяти

Я пытаюсь найти свои ноги в программировании без блокировки. Прочитав различные объяснения семантики упорядочения памяти, я хотел бы выяснить, что может произойти переупорядочение. Насколько я понял, инструкции могут быть переупорядочены компиляторо…
0 ответов

Эффекты использования memory_order_consume

Я постоянно пытался обернуть голову вокруг этой модели заказа и как она полезна. Этот ответ гласит никакие нагрузки, которые зависят от вновь загруженного значения, не могут быть переупорядочены по сравнению с атомная нагрузка. Т.е., если они находя…
29 май '17 в 06:15
0 ответов

Атомарное хранилище вызывает полную очистку кеша или делает кеш недействительным

Я читал некоторые статьи и блоги, которые описывают атомистику. Все они упоминают, что значение, записанное магазином, является видимым для последующей загрузки. Может ли кто-нибудь указать мне направление или документ, который описывает, как обраба…
26 сен '16 в 16:02
0 ответов

В чем разница сильно упорядоченной архитектуры и плохо упорядоченной архитектуры

Мы знаем, что X86_64 - строго упорядоченная архитектура. ARM64, PowerPC или... Alpha, напротив, плохо упорядочены. Какая разница между ними? Это влияет на график процесса? Это сделает исполнимую программу более непредсказуемой, если архитектура плох…
22 мар '17 в 02:54
4 ответа

Получение блокировки путем проверки состояния и повторной проверки

Является ли что-то вроде этого действительным: std::vector<std::vector<int>> data; std::shared_mutex m; ... void Resize() { // AreAllVectorsEmpty: std::all_of(data.begin(), data.end(), [](auto& v) { return v.empty(); } if (!AreAllVec…
29 май '18 в 06:36
0 ответов

Как проверить наличие проблем с порядком памяти в коде без блокировки / на основе атомного кода на x86/64?

Пробуя примеры из учебников по использованию тегов порядка памяти с атомарностью, я понял, что даже с std::memory_order_relaxedпримеры, подобные приведенному ниже, работают так же, как если бы использовались более сильные теги порядка памяти. По пои…
22 мар '18 в 22:18
2 ответа

Приобретение / выпуск VS последовательной согласованности в C++11?

#include <thread> #include <atomic> #include <cassert> std::atomic<bool> x = {false}; std::atomic<bool> y = {false}; std::atomic<int> z = {0}; void write_x() { x.store(true, std::memory_order_release); } void writ…
22 май '18 в 08:18
1 ответ

Может ли переупорядочение памяти привести к тому, что C# получит доступ к нераспределенной памяти?

Насколько я понимаю, C# является безопасным языком и не позволяет получить доступ к нераспределенной памяти, кроме как через unsafe ключевое слово. Однако его модель памяти позволяет переупорядочивать при несинхронизированном доступе между потоками.…
04 июл '18 в 21:12
3 ответа

Достаточно ли std::memory_order_relax для проверки "доступности"?

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

Упорядочение неатомарных операций за счет использования атомарных операций в качестве основы для средств синхронизации более высокого уровня

Сначала я привожу описание Энтони Уильямса "Параллельность в C++": class spinlock_mutex { std::atomic_flag flag; public: spinlock_mutex(): flag(ATOMIC_FLAG_INIT) {} void lock() { while(flag.test_and_set(std::memory_order_acquire)); } void unlock() {…
23 мар '18 в 04:46
1 ответ

Приращение атома в C++ с упорядочением памяти

После того, как я прочитал параллелизм C++ в действии, Глава 5, я попытался написать некоторый код, чтобы проверить мое понимание порядка памяти: #include <iostream> #include <vector> #include <thread> #include <atomic> std::…
11 авг '17 в 14:43
1 ответ

Почему fetch_sub не является операцией релиза?

Цитируется из C++ Concurrency in Action $ Листинг 5.9 fetch_sub работа с memory_order_acquire семантика не синхронизируется ни с чем, даже если она хранит значение, потому что это не операция освобождения. Аналогично, магазин не может синхронизирова…
3 ответа

Параллельные магазины рассматриваются в последовательном порядке

Руководство разработчика программного обеспечения Intel Architectures, август 2012 г., вып. 3А, раздел 8.2.2: Любые два хранилища рассматриваются в согласованном порядке процессорами, отличными от тех, которые выполняют хранилища. Но может ли это бы…
09 янв '13 в 04:23
2 ответа

Инструкция по переупорядочению на Intel

Я пытаюсь понять порядок перестановки команд на следующем простом примере: int a; int b; void foo(){ a = 1; b = 1; } void bar(){ while(b == 0) continue; assert(a == 1); } Известно, что в этом примере утверждение может потерпеть неудачу, если выполня…
08 авг '18 в 11:42