Описание тега relaxed-atomics
1
ответ
В чем (небольшая) разница в расслабляющих атомных правилах?
После того, как Херб Саттерс отлично рассказал о "атомном оружии", я немного запутался в примерах " Расслабленной атомики". Я взял с собой, что атом в модели памяти C++ (SC-DRF = последовательная согласованность для Data Race Free) "получает" при за…
09 июн '13 в 21:29
5
ответов
Стандарт C++: можно ли поднять блокированные атомарные хранилища выше блокировки мьютекса?
Есть ли в стандарте какая-либо формулировка, гарантирующая, что расслабленные хранилища для атомщиков не будут отменены над блокировкой мьютекса? Если нет, то есть ли какая-либо формулировка, в которой прямо говорится, что компилятору или процессору…
03 авг '17 в 05:04
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…
03 ноя '13 в 11:36
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 для каждого потока работающий код буде…
11 фев '19 в 21:29
2
ответа
Имеет ли atomic_thread_fence(memory_order_seq_cst) семантику полного барьера памяти?
Полный / общий барьер памяти - это тот, где все операции LOAD и STORE, указанные до барьера, будут казаться выполненными до всех операций LOAD и STORE, указанных после барьера, относительно других компонентов системы. Согласно cppreference, memory_o…
25 авг '14 в 01:47
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++ есть вещи, которые находятся где-то между четко определенными и неопределенными. В частности, они называются реализацией определенной и неопределенной. Прямо сейчас я интересуюсь неуказанными вещами. Когда можно использовать такие функции и ко…
17 июл '14 в 20:45
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(…
03 май '17 в 02:15
2
ответа
std::atomic_bool для флага отмены: является ли std::memory_order_relaxed правильным порядком памяти?
У меня есть поток, который читает из сокета и генерирует данные. После каждой операции поток проверяет std::atomic_bool флаг, чтобы увидеть, если он должен выйти рано. Чтобы отменить операцию, я установил флаг отмены на trueзатем позвоните join() на…
06 дек '18 в 14:10
3
ответа
Как работает memory_order_relaxed для увеличения количества атомных ссылок в интеллектуальных указателях?
Рассмотрим следующий фрагмент кода, взятый из выступления Херба Саттера об атомарности: Класс smart_ptr содержит объект pimpl с именем control_block_ptr, содержащий ссылки на количество ссылок. // Thread A: // smart_ptr copy ctor smart_ptr(const sma…
24 дек '14 в 03:42
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…
08 окт '19 в 17:02
3
ответа
Минимальные требования к заказу
Позволять x а также y быть двумя разными переменными типа std::atomic<int> и предположим, что текущая стоимость обоих из них 1. Каков наиболее свободный набор требований к порядку, чтобы следующий код генерировал некоторые выходные данные? (т.…
30 дек '19 в 16:10
2
ответа
Переупорядочиваются ли расслабленные атомные магазины перед выпуском? (аналогично загрузке / захвату)
Я прочитал в спецификациях en.cppreference.com расслабленные операции на атомике: "[...] гарантирует только атомарность и согласованность порядка модификации ". Итак, я спрашивал себя, будет ли работать такой "порядок модификации", когда вы работает…
01 май '20 в 13:02