Результаты поиска по запросу "atomic"

3 ответа

Примечание: вы можете использовать, например, «регистры FPU» для атомарной модификации (если вам это действительно нужно), но вы должны скрыть от компилятора и ОСРВ, что архитектура имеет FPU.

ипы данных на микроконтроллерах STM32: http://www.keil.com/support/man/docs/armcc/armcc_chr1359125009502.htm [http://www.keil.com/support/man/docs/armcc/armcc_chr1359125009502.htm]. Эти микроконтроллеры используют 32-битные процессоры с ядром ...

4 ответа

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

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

3 ответа

 для некоторого обсуждения проблем, обнаруженных в стандарте C11.

структура данных содержит несколько элементов, ее атомарная версия не может (всегда) быть свободной от блокировки. Мне сказали, что это верно для больших типов, потому что процессор не может атомарно изменить данные без использования какой-либо ...

ТОП публикаций

4 ответа

 Ответ подробно объясняет, почему нам не нужно использовать какие-либо взаимосвязанные операции для простого чтения / записи (но мы делаем для чтения-изменения-записи).

ечание: я добавил теги к этому вопросу в зависимости от того, где, по моему мнению, будут люди, которые могут помочь, поэтому, пожалуйста, не кричите :)) В моем 64-битном проекте VS 2017 у меня есть значение длиной 32 битаm_lClosed, Когда я хочу ...

2 ответа

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

лькуstd::atomic::is_lock_free() не может действительно отражать реальность [ ссылка [https://stackoverflow.com/q/49816855/1348273]], Я собираюсь написать настоящий тест во время выполнения. Однако, когда я приступил к этому, я обнаружил, что это ...

1 ответ

 было бы ложным.

с Apple LLVM 9.1.0,is_lock_free() на 128-битных структурах вернули true. Чтобы завершитьstd::optional Поддержка, я затем обновился до MacPorts GCC 7.3. Во время моей первой попытки компиляции я столкнулся с этой печально известной ошибкой ...

1 ответ

потому что он объявлен как дефолт, а не объявлен и затем определен как дефолт. Таким образом, применим второй пункт [dcl.init] / 7, объект инициализируется нулями, после чего следует (не) вызов конструктора (по умолчанию), который ничего не делает.

ботай здесь я понимаю, что фактически ноль инициализируетstd::atomic<T> a{}, Я всегда так думал и практически использовал его доaэто, Прежде чем объяснить мое понимание этого, я хочу показать, что, по крайней мере, gcc и clang делают это на ...

1 ответ

@PeterCordes Я полностью согласен .. Безопасно использовать односторонний барьерный подход для описания того, как все работает. Это также (по крайней мере, для меня) самый простой способ визуализации вещей.

ели памяти C ++ существует общий порядок для всех загрузок и хранилищ всех последовательно согласованных операций. Мне интересно, как это взаимодействует с операциями, которые имеют другие упорядочения памяти, которые упорядочены до / после ...

0 ответов

@IwillnotexistIdonotexist: Хорошо заметили. Я думаю, это означает, что вы можете получить одну широкую запись MMIO для смежных немаскированных элементов или две узкие. Но выполнение одного выровненного 8-байтового атомарного хранилища все же дает атомарность для 4-байтовых половинок, хотя для MMIO это не так. Поэтому я не думаю, что это исключает атомарность для каждого элемента, потому что специфичная для реализации часть может быть только объединением хранилищ элементов в более широкие и все еще атомарные хранилища.

отрим массив какatomic<int32_t> shared_array[], Что делать, если вы хотите SIMD векторизацииfor(...) sum += shared_array[i].load(memory_order_relaxed)?. Или искать в массиве первый ненулевой элемент или обнулять его диапазон? Это, вероятно, ...

0 ответов

@PeterCordes Хороший вопрос, я отредактировал ответ, чтобы указать, какие хранилища / загрузки гарантированно будут атомарными.

(и в нескольких SO) я вижу, что C ++ не поддерживает что-то вроде без блокировки [http://en.cppreference.com/w/cpp/atomic/atomic_is_lock_free]и еще не может поддерживать что-то вроде атомарного вектора AVX / SSE, потому что он зависит ...