Описание тега memory-barriers
Барьер памяти - это специальная инструкция процессора, которая налагает ограничения на порядок, в котором доступ к памяти становится видимым для других процессоров / ядер в многопроцессорной или многоядерной системе.
1
ответ
Каково поведение __faststorefence?
Что касается этого вопроса, меня интересуют только x86 и x86-64. Для MSVC 2005 документация для __faststorefence гласит: "Гарантирует, что каждый предыдущий магазин виден глобально перед любым последующим магазином ". Для MSVC 2008 и 2010 он изменил…
25 июн '11 в 21:22
3
ответа
Заборы исполнения и памяти
Я знаю, что современные процессоры могут работать не по порядку, однако они всегда удаляют результаты по порядку, как описано в Википедии. "Процессоры из Одера заполняют эти" слоты "вовремя другими инструкциями, которые готовы, а затем переупорядочи…
08 сен '11 в 10:52
7
ответов
Достаточны ли функции блокировки мьютекса без энергозависимости?
Мы с коллегой пишем программное обеспечение для различных платформ, работающих на x86, x64, Itanium, PowerPC и других 10-летних серверных процессорах. Мы только что обсудили, достаточно ли самих мьютекс-функций, таких как pthread_mutex_lock() ... pt…
26 июл '11 в 23:10
1
ответ
В чем (небольшая) разница в расслабляющих атомных правилах?
После того, как Херб Саттерс отлично рассказал о "атомном оружии", я немного запутался в примерах " Расслабленной атомики". Я взял с собой, что атом в модели памяти C++ (SC-DRF = последовательная согласованность для Data Race Free) "получает" при за…
09 июн '13 в 21:29
1
ответ
Использование барьера памяти в очередях без блокировки
Недавно я прочитал официальный документ Пола МакКенни 2010 года "Барьеры памяти: аппаратное представление для хакеров программного обеспечения". Я был бы очень признателен за некоторые отзывы / комментарии / рекомендации в отношении небольших раздел…
10 сен '12 в 09:14
1
ответ
Переупорядочение зависимых нагрузок в процессоре
Я читал очень популярную статью Пола МакКенни (Paul E. McKenney), " Память барьеров: взгляд на оборудование для хакеров". В статье подчеркивается, что очень слабо упорядоченные процессоры, такие как Alpha, могут переупорядочивать зависимые нагрузки,…
31 янв '16 в 15:35
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…
29 июн '18 в 19:40
2
ответа
Какие предположения должен сделать код относительно модели памяти ЦП, и как эти предположения должны быть документированы?
Из того, что я прочитал, архитектуры процессоров Intel обеспечивают более сильную модель памяти, чем требуется для реализации.net. В какой степени для кода целесообразно использовать гарантии, которые дают процессоры Intel, или в какой степени код д…
15 июн '12 в 15:43
0
ответов
Неиспользованное порванное чтение - неопределенное поведение?
Вопрос: Существуют шаблоны (например, здесь C#/CLR: MemoryBarrier и рваные операции чтения), которые могут выполнять рваные операции чтения, но никогда не использовать результирующее значение, если могло произойти роковое чтение. Это неопределенное…
31 дек '15 в 01:06
3
ответа
Согласованность памяти Java LockSupport
Java 6 API вопрос. Звонит LockSupport.unpark(thread) иметь отношение до случившегося к возвращению из LockSupport.park в только что непаренной ветке? Я сильно подозреваю, что ответ - да, но Javadoc, кажется, не упоминает об этом явно.
19 мар '10 в 04:55
2
ответа
C#/CLR: MemoryBarrier и разорванные чтения
Просто играл с параллелизмом в свое свободное время и хотел попытаться предотвратить разрывное чтение без использования блокировок на стороне читателя, чтобы одновременные читатели не мешали друг другу. Идея состоит в том, чтобы сериализовать записи…
21 сен '13 в 18:14
2
ответа
Может ли Unlock, основанный на атомных операциях, разблокировать спин-блокировку, чтобы установить флаг блокировки на ноль?
Скажем, например, у меня есть эксклюзивная реализация спин-блокировки на основе atomic-ops, как показано ниже: bool TryLock(volatile TInt32 * pFlag) { return !(AtomicOps::Exchange32(pFlag, 1) == 1); } void Lock (volatile TInt32 * pFlag) { while (Ato…
18 сен '15 в 17:42
1
ответ
Понимание кольцевого буфера ядра Linux
На http://lwn.net/Articles/378262/ есть статья, в которой описывается реализация циклического буфера в ядре Linux. У меня есть несколько вопросов: Вот "производитель": spin_lock(&producer_lock); unsigned long head = buffer->head; unsigned lon…
17 янв '13 в 16:08
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 - давайте пре…
06 май '17 в 19:08