Описание тега relaxed-atomics

1 ответ

В чем (небольшая) разница в расслабляющих атомных правилах?

После того, как Херб Саттерс отлично рассказал о "атомном оружии", я немного запутался в примерах " Расслабленной атомики". Я взял с собой, что атом в модели памяти C++ (SC-DRF = последовательная согласованность для Data Race Free) "получает" при за…
5 ответов

Стандарт C++: можно ли поднять блокированные атомарные хранилища выше блокировки мьютекса?

Есть ли в стандарте какая-либо формулировка, гарантирующая, что расслабленные хранилища для атомщиков не будут отменены над блокировкой мьютекса? Если нет, то есть ли какая-либо формулировка, в которой прямо говорится, что компилятору или процессору…
3 ответа

Стек без блокировок - это правильное использование C++11 расслабленной атомики? Можно ли это доказать?

Я написал контейнер для очень простого фрагмента данных, который необходимо синхронизировать между потоками. Я хочу максимальной производительности. Я не хочу использовать замки. Я хочу использовать "расслабленную" атомику. Частично для этого немног…
18 июл '14 в 18:04
3 ответа

С11/ С ++11 слабые тесты памяти

Может ли кто-нибудь указать на результаты сравнения производительности кода C11/C++11 с использованием упрощенных атомарных операций (особенно memory_order_release а также memory_order_acquire, но также memory_order_consume а также memory_order_rela…
3 ответа

Вызывает ли `into_inner()` на атомарном учете все расслабленные записи?

Есть ли into_inner() вернуть все расслабленные записи в этом примере программы? Если да, то какая концепция это гарантирует? extern crate crossbeam; use std::sync::atomic::{AtomicUsize, Ordering}; fn main() { let thread_count = 10; let increments_pe…
16 окт '17 в 17:18
1 ответ

Обратный отсчет C++ в CyclicBarrier идет неправильно с использованием атомарных переменных [решения без блокировок, пожалуйста]

Я пытаюсь реализовать циклический барьер в C++ с нуля. Цель состоит в том, чтобы реализовать как можно более полную реализацию Java. Ссылка на класс здесь. https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html Теперь в мо…
16 авг '18 в 00:50
2 ответа

Почему memory_order_relaxed использует атомарные (с префиксом) инструкции на x86?

На Visual C++ 2013, когда я компилирую следующий код #include <atomic> int main() { std::atomic<int> v(2); return v.fetch_add(1, std::memory_order_relaxed); } Я получаю обратно следующую сборку на x86: 51 push ecx B8 02 00 00 00 mov eax,…
15 июн '14 в 22:45
1 ответ

Будет ли fetch_add с расслабленным порядком памяти возвращать уникальные значения?

Представьте себе N потоков, выполняющих следующий простой код: int res = num.fetch_add(1, std::memory_order_relaxed); где num является: std::atomic<int> num = 0; Совершенно безопасно предположить, что res для каждого потока работающий код буде…
2 ответа

Имеет ли atomic_thread_fence(memory_order_seq_cst) семантику полного барьера памяти?

Полный / общий барьер памяти - это тот, где все операции LOAD и STORE, указанные до барьера, будут казаться выполненными до всех операций LOAD и STORE, указанных после барьера, относительно других компонентов системы. Согласно cppreference, memory_o…
1 ответ

Понимание memory_order_relaxed

Я пытаюсь понять специфику memory_order_relaxed. Я имею в виду эту ссылку: ссылка CPP. #include <future> #include <atomic> std::atomic<int*> ptr {nullptr}; void fun1(){ ptr.store(new int{0}, std::memory_order_relaxed); } void fun2(…
01 июл '15 в 00:40
1 ответ

Когда можно делать / использовать что-то с неопределенным поведением?

В C++ есть вещи, которые находятся где-то между четко определенными и неопределенными. В частности, они называются реализацией определенной и неопределенной. Прямо сейчас я интересуюсь неуказанными вещами. Когда можно использовать такие функции и ко…
2 ответа

Такое std::atomic::fetch_add - это операция сериализации на x86-64?

Учитывая следующий код: std::atomic<int> counter; /* otherStuff 1 */ counter.fetch_add(1, std::memory_order_relaxed); /* otherStuff 2 */ Есть ли в x86-64 инструкция (скажем, менее 5-летней архитектуры), которая позволила бы переупорядочить oth…
28 июн '18 в 15:08
1 ответ

Использование relaxed atomic boolean для синхронизации двух потоков

Некоторые коллеги и я обсуждают расслабленный атомарный логический тип, который используется для синхронизации двух потоков. Мы провели некоторые онлайн-исследования и нашли другие образцы и фрагменты, касающиеся расслабленной атомики, но мы не може…
12 дек '18 в 10:22
2 ответа

Возможно ли, что магазин с memory_order_relaxed никогда не достигнет других потоков?

Предположим, у меня есть поток A, который пишет в atomic_int x = 0;, с помощью x.store(1, std::memory_order_relaxed);, Без каких-либо других методов синхронизации, сколько времени потребуется, чтобы другие потоки могли это увидеть, используя x.load(…
2 ответа

std::atomic_bool для флага отмены: является ли std::memory_order_relaxed правильным порядком памяти?

У меня есть поток, который читает из сокета и генерирует данные. После каждой операции поток проверяет std::atomic_bool флаг, чтобы увидеть, если он должен выйти рано. Чтобы отменить операцию, я установил флаг отмены на trueзатем позвоните join() на…
3 ответа

Как работает memory_order_relaxed для увеличения количества атомных ссылок в интеллектуальных указателях?

Рассмотрим следующий фрагмент кода, взятый из выступления Херба Саттера об атомарности: Класс smart_ptr содержит объект pimpl с именем control_block_ptr, содержащий ссылки на количество ссылок. // Thread A: // smart_ptr copy ctor smart_ptr(const sma…
1 ответ

Атомарные операции с одной переменной

Каковы возможные окончательные результаты для переменной xв следующем фрагменте кода C++? (ответьте, исходя из того, что разрешено стандартом C++, а не того, что в настоящее время доступно на разных платформах) // Inside Thread 0 std::atomic<int&…
25 дек '19 в 01:19
1 ответ

Пример неправильного использования std::memory_order:: Relaxed в стандарте C++ [алгоритмы.parallel.exec / 5 в n4713]

Один из примеров неправильного использования std::memory_order::relaxed в стандарте C++: std::atomic<int> x{0}; int a[] = {1,2}; std::for_each(std::execution::par, std::begin(a), std::end(a), [&](int) { x.fetch_add(1, std::memory_order::re…
3 ответа

Минимальные требования к заказу

Позволять x а также y быть двумя разными переменными типа std::atomic<int> и предположим, что текущая стоимость обоих из них 1. Каков наиболее свободный набор требований к порядку, чтобы следующий код генерировал некоторые выходные данные? (т.…
30 дек '19 в 16:10
2 ответа

Переупорядочиваются ли расслабленные атомные магазины перед выпуском? (аналогично загрузке / захвату)

Я прочитал в спецификациях en.cppreference.com расслабленные операции на атомике: "[...] гарантирует только атомарность и согласованность порядка модификации ". Итак, я спрашивал себя, будет ли работать такой "порядок модификации", когда вы работает…