Вопросы с тегом «atomic»

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

297
В чем разница между атомарным / энергозависимым / синхронизированным?

Как атомарные / энергозависимые / синхронизированные работают внутри? В чем разница между следующими блоками кода? Код 1 private int counter; public int getNextUniqueIndex() { return counter++; } Код 2 private AtomicInteger counter; public int getNextUniqueIndex() { return...

276
Что означает «атомарный» в программировании?

В книге «Эффективная Java» говорится: Спецификация языка гарантирует, что чтение или запись переменной является атомарным, если переменная не имеет тип longили double[JLS, 17.4.7]. Что означает «атомарный» в контексте программирования на Java или программирования в...

174
Что такое std :: atomic?

Я понимаю, что std::atomic<>это атомный объект. Но в какой степени? Насколько я понимаю, операция может быть атомарной. Что именно означает сделать объект атомарным? Например, если два потока одновременно выполняют следующий код: a = a + 12; Тогда вся операция (скажем add_twelve_to(int))...

153
Может ли num ++ быть атомарным для int num?

В общем случае for int num, num++(или ++num) как операция чтения-изменения-записи не является атомарной . Но я часто вижу, как компиляторы, например GCC , генерируют для него следующий код ( попробуйте здесь ): Так как строка 5, которая соответствует num++одной инструкции, можем ли мы сделать...

140
Безопасна ли! = Проверка потоков?

Я знаю, что составные операции, например i++, не являются потокобезопасными, поскольку включают в себя несколько операций. Но является ли проверка ссылки на самой себе поточно-ориентированной операцией? a != a //is this thread-safe Я пытался запрограммировать это и использовать несколько потоков,...

131
Когда использовать volatile с многопоточностью?

Если есть два потока, обращающихся к глобальной переменной, то во многих руководствах говорится, что переменная должна быть изменчивой, чтобы компилятор не кэшировал переменную в регистре и, таким образом, не обновлялся правильно. Однако два потока, оба обращающиеся к общей переменной, - это то,...

116
AtomicInteger lazySet против набора

В чем разница между методами lazySetи ? В документации нечего сказать :setAtomicIntegerlazySet В конце концов устанавливается на заданное значение. Кажется, что сохраненное значение не будет сразу установлено на желаемое значение, а вместо этого будет запланировано установить какое-то время в...

107
Является ли добавление файла атомарным в UNIX?

В общем, что мы можем считать само собой разумеющимся, когда добавляем к файлу в UNIX несколько процессов? Возможна ли потеря данных (один процесс перезаписывает изменения другого)? Возможно ли искажение данных? (Например, каждый процесс добавляет одну строку за каждое добавление в файл журнала,...

86
Понимание std :: atomic :: compare_exchange_weak () в C ++ 11

bool compare_exchange_weak (T& expected, T val, ..); compare_exchange_weak()является одним из примитивов сравнения-обмена, представленных в C ++ 11. Он слабый в том смысле, что возвращает false, даже если значение объекта равно expected. Это происходит из-за ложного сбоя на некоторых...

13
Как достичь барьера StoreLoad в C ++ 11?

Я хочу написать переносимый код (Intel, ARM, PowerPC ...), который решает вариант классической задачи: Initially: X=Y=0 Thread A: X=1 if(!Y){ do something } Thread B: Y=1 if(!X){ do something } в которой цель состоит в том, чтобы избежать ситуации, в которой работают оба потокаsomething . (Хорошо,...

12
Инициализация вектора атомности

Рассматривать: void foo() { std::vector<std::atomic<int>> foo(10); ... } Содержимое foo теперь действительно? Или мне нужно явно выполнить цикл и инициализировать их? Я проверил на Godbolt, и, кажется, все в порядке, однако стандарт кажется очень запутанным в этом вопросе. Конструктор...

10
C11 Atomic Acquire / Release и x86_64 отсутствие согласованности загрузки / хранения?

Я борюсь с разделом 5.1.2.4 стандарта C11, в частности с семантикой Release / Acquire. Я отмечаю, что https://preshing.com/20120913/acquire-and-release-semantics/ (среди прочих) заявляет, что: ... Семантика релиза предотвращает переупорядочение памяти релиз-релиза с любой предшествующей ему...

9
Правильна ли эта реализация C ++ AtomicInt?

Предпосылка: я работаю со встроенной (почти голой) средой ARM, где у меня даже нет C ++ 11 (с std::atomic<int>), поэтому избегайте ответов типа « просто используйте стандартный C ++std::atomic<int> »: я не могу . Является ли эта ARM- реализация AtomicInt правильной? (предположим, что...

9
Что гарантировано с C ++ std :: atomic на уровне программиста?

Я выслушал и прочитал несколько статей, выступлений и вопросов о стековом потоке std::atomicи хотел бы быть уверен, что хорошо это понял. Потому что я все еще немного запутался с видимостью записи строк кэша из-за возможных задержек в протоколах когерентности кэша MESI (или производных), буферах...