Описание тега memory-barriers

Барьер памяти - это специальная инструкция процессора, которая налагает ограничения на порядок, в котором доступ к памяти становится видимым для других процессоров / ядер в многопроцессорной или многоядерной системе.
1 ответ

Каково поведение __faststorefence?

Что касается этого вопроса, меня интересуют только x86 и x86-64. Для MSVC 2005 документация для __faststorefence гласит: "Гарантирует, что каждый предыдущий магазин виден глобально перед любым последующим магазином ". Для MSVC 2008 и 2010 он изменил…
3 ответа

Заборы исполнения и памяти

Я знаю, что современные процессоры могут работать не по порядку, однако они всегда удаляют результаты по порядку, как описано в Википедии. "Процессоры из Одера заполняют эти" слоты "вовремя другими инструкциями, которые готовы, а затем переупорядочи…
08 сен '11 в 10:52
7 ответов

Достаточны ли функции блокировки мьютекса без энергозависимости?

Мы с коллегой пишем программное обеспечение для различных платформ, работающих на x86, x64, Itanium, PowerPC и других 10-летних серверных процессорах. Мы только что обсудили, достаточно ли самих мьютекс-функций, таких как pthread_mutex_lock() ... pt…
1 ответ

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

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

Использование барьера памяти в очередях без блокировки

Недавно я прочитал официальный документ Пола МакКенни 2010 года "Барьеры памяти: аппаратное представление для хакеров программного обеспечения". Я был бы очень признателен за некоторые отзывы / комментарии / рекомендации в отношении небольших раздел…
10 сен '12 в 09:14
1 ответ

Переупорядочение зависимых нагрузок в процессоре

Я читал очень популярную статью Пола МакКенни (Paul E. McKenney), " Память барьеров: взгляд на оборудование для хакеров". В статье подчеркивается, что очень слабо упорядоченные процессоры, такие как Alpha, могут переупорядочивать зависимые нагрузки,…
1 ответ

Какова область применения atomic_thread_ fence?

* Пожалуйста, поймите, что я не из англоговорящей страны, поэтому, если вы не поняли мой вопрос, пожалуйста, дайте мне знать, чтобы я мог объяснить другими словами. J Является ли область ограждения atomic_thread_fence единицей области, которая была …
18 июл '18 в 10:06
0 ответов

Понимание использования барьеров памяти C++

Барьер std::memory_order_acquire гарантирует, что все операции, такие как чтение / запись, которые идут после барьера, будут выполнены после всех операций чтения (загрузки) перед барьером. Например, у меня есть следующий код: #include <iostream&g…
01 мар '17 в 08:28
1 ответ

Барьеры памяти для критических секций при запуске MCU Cortex-M4F

ВВЕДЕНИЕ: Я разработал встраиваемую систему с 32-битным микроконтроллером ARM® Cortex®-M4F ATSAME54N20A. Скоро плата будет собрана и готова к программированию, поэтому я настраивал свою среду программирования. Я выбрал простое решение, в котором при…
23 июн '18 в 23:01
1 ответ

Не нарушен ли популярный шаблон "флаг с изменчивым опросом"?

Предположим, что я хочу использовать логический флаг состояния для совместной отмены между потоками. (Я понимаю, что желательно использовать CancellationTokenSource вместо; это не главное в этом вопросе.) private volatile bool _stopping; public void…
22 май '17 в 20:45
3 ответа

Java, энергозависимые и памяти барьеры на архитектуре x86

Это больше теоретический вопрос. Я не уверен, что все концепции, поведение компилятора и т. Д. Обновлены и все еще используются, но я хотел бы получить подтверждение, если я правильно понимаю некоторые концепции, которые пытаюсь выучить. Язык - это …
23 апр '16 в 13:22
1 ответ

Инициализация, прежде чем мы начнем многопоточность кода

int main(){ // X is a shared resource initSharedResourceX(); startMultitreadingServer(); // handle requests concurrently with function handle() <- below. All handlers (run concurrently) access to X **read-only**. } int handle(){ return X.get(); /…
30 авг '18 в 07:51
1 ответ

Асинхронизация при продолжении в другом потоке

Я знаю, что Задача может продолжить выполнение в другом потоке, что подтверждается этим кодом. public async Task Test() { var id1 = System.Environment.CurrentManagedThreadId; await Task.Delay(1000); var id2 = System.Environment.CurrentManagedThreadI…
2 ответа

Какие предположения должен сделать код относительно модели памяти ЦП, и как эти предположения должны быть документированы?

Из того, что я прочитал, архитектуры процессоров Intel обеспечивают более сильную модель памяти, чем требуется для реализации.net. В какой степени для кода целесообразно использовать гарантии, которые дают процессоры Intel, или в какой степени код д…
0 ответов

Неиспользованное порванное чтение - неопределенное поведение?

Вопрос: Существуют шаблоны (например, здесь C#/CLR: MemoryBarrier и рваные операции чтения), которые могут выполнять рваные операции чтения, но никогда не использовать результирующее значение, если могло произойти роковое чтение. Это неопределенное…
3 ответа

Согласованность памяти Java LockSupport

Java 6 API вопрос. Звонит LockSupport.unpark(thread) иметь отношение до случившегося к возвращению из LockSupport.park в только что непаренной ветке? Я сильно подозреваю, что ответ - да, но Javadoc, кажется, не упоминает об этом явно.
2 ответа

C#/CLR: MemoryBarrier и разорванные чтения

Просто играл с параллелизмом в свое свободное время и хотел попытаться предотвратить разрывное чтение без использования блокировок на стороне читателя, чтобы одновременные читатели не мешали друг другу. Идея состоит в том, чтобы сериализовать записи…
2 ответа

Может ли Unlock, основанный на атомных операциях, разблокировать спин-блокировку, чтобы установить флаг блокировки на ноль?

Скажем, например, у меня есть эксклюзивная реализация спин-блокировки на основе atomic-ops, как показано ниже: bool TryLock(volatile TInt32 * pFlag) { return !(AtomicOps::Exchange32(pFlag, 1) == 1); } void Lock (volatile TInt32 * pFlag) { while (Ato…
1 ответ

Понимание кольцевого буфера ядра Linux

На http://lwn.net/Articles/378262/ есть статья, в которой описывается реализация циклического буфера в ядре Linux. У меня есть несколько вопросов: Вот "производитель": spin_lock(&producer_lock); unsigned long head = buffer->head; unsigned lon…
2 ответа

Летучий против не летучий

Давайте рассмотрим следующий кусок кода на Java int x = 0; int who = 1 Thread #1: (1) x++; (2) who = 2; Thread #2 while(who == 1); x++; print x; ( the value should be equal to 2 but, perhaps, it is not* ) (Я не знаю моделей памяти Java - давайте пре…