Реализация выглядит правильно, что означает, что в ней нет гонок данных и она обеспечивает желаемую защиту данных. Но, как уже заметил Кейси, вы эффективно пытаетесь имитировать поведение mutex. И...
Ваш выбор: забудьте о том, чтобы сделать его атомарным, и используйте mutex для сериализации доступа выберите некоторую интегральную единицу времени (например, миллисекунды с эпохи) и преобразуйте...
Как правило, используйте std::atomic для типов POD, где базовая специализация сможет использовать что-то умное, например блокировку шины на CPU (что даст вам не больше накладных расходов, чем дамп...
[atomics.types.generic]/5 говорит это об интегральных специализациях: Атомные интегральные специализации и атомные специализации должны иметь типовую форму. Каждый из них должен иметь тривиальный...
Вам нужно сделать атрибут x атомарным, а не весь ваш класс, как показано ниже: class A { std::atomic<int> x; public: A() { x=0; } void Add() { x++; } void Sub() { x--; } }; Ошибка, которую вы...
Я воспроизвел вашу проблему с MinGW 4.6.1 (и обнаружил, что она исправлена в 4.7.0). Если вы не можете перейти на более новый MinGW, который устранил проблему, вы должны иметь возможность исправить...
Вы можете сделать: std::pair<std::atomic<bool>, int> p(true, 1); При этом используется true для инициализации атомарного первого элемента без каких-либо посторонних копий или...
Я полагаю, вам придется использовать доступ к атомной памяти и записи: typedef union { int integer; float flt; double dbl; int *intArray; float *floatArray; unsigned char *byteArray; } ValueUnion;...
Стандарт не определяет специализацию std::atomic<std::string> , поэтому применяется общий template <typename T> std::atomic<T> . 29.5 [atomics.types.generic] p1 состояния:...
Ну, материал шаблона немного запутан, но его использование довольно интуитивно понятно: #include <atomic> #include <cstdint> #include <iostream> template <typename T,...
Вы можете напрямую инициализировать атомарную переменную, которая не требует конструктора удаленной копии, например: std::atomic<int> ActionBasedOrdersExecutor::OrdersExecutorIdCounter{0};
Из документов : Избегайте перехвата исключений внутри atomic! Поскольку функция имела несколько вложенных попыток и исключений, я вставил еще один transaction.atomic() в попытку и исключение,...
Учитывая определение int settings[N_STNGS]; std::atomic<size_t> current_settings(0); и Выполнение потока 1: settings[new_settings] = somevalue; // line A current_settings=new_settings; // line...
Я думаю, что вы должны использовать приказы памяти: data = new char[100]; data[0] = 1; ready.store_explicit(true, std::memory_order_release); if(ready.load_explicit(std::memory_order_aqcuire)) {...
Обратите внимание, что вы не можете использовать атрибут atomic . Существует либо неатомный, либо нет (по умолчанию используется атомарный). Итак, вы ищете @property(retain) NSString *myString; .
Атомарные свойства необходимы в многопоточной среде с подсчетом ссылок, чтобы предотвратить исчезновение объектов до того, как поток сможет их сохранить. Рассмотрим наивную реализацию метода доступа...
Обычная реализация-это hash-таблица мьютексов (или даже просто простые спин-блокировки без возврата к OS-вспомогательному sleep/wakeup),, использующему адрес атомарного объекта в качестве ключа ....
Работает ли std::atomic::compare_exchange_weak со сложными структурами? Да, но есть условия , которые включают в себя тривиально копируемые и тривиально конструируемые . Если intel cpu hardware...
Похоже, что это действительно пробел в языке, и есть предложение исправить его для c++ 20: p0019R7: Атомная ссылка Аннотация: Расширение библиотеки атомарных операций, позволяющее применять...
Являются ли операции назначения и доступа для типов, не относящихся к ссылкам, также атомарными? Да, это так. atomic<T>::operator T и atomic<T>::operator= эквивалентны...
Я думаю, что это связано с оборудованием. Многие платформы имеют атомику для обработки += , но я не знаю ни одной, которая предлагает *= . Реализация этого через блокировку была бы простой, но...
Распространенным заблуждением является считать операции только для чтения атомарными по своей природе. Это не гарантировано. Также распространено заблуждение , что атомарность гарантирует thread...
Проспав на нем ночь, я придумал пару подходов. Ни один из них не является особенно элегантным, но позвольте мне поместить их здесь в качестве пищи для размышлений: MemCache предлагает (по крайней...
Барьер памяти применяется ко всем ссылкам на память, даже к несвязанным. При синхронизации total вы увидите обновленную копию всех значений памяти, а когда вы покинете блок, появится еще один барьер...
У меня нет доступа к компиляторам Visual C++, но я предполагаю, что следующее может сработать. Использование косвенной адресации с использованием карты (умные) указатели atomic с: #include...