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

По вопросам о моделях упорядочивания памяти на уровне языка программирования (выше ISA или уровня машинного языка).
3 ответа

Что означает "пересылка из буфера хранилища" в руководстве разработчика Intel?

В Руководстве разработчика программного обеспечения для архитектуры Intel 64 и IA-32 говорится следующее о переупорядочении действий одним процессором (Раздел 8.2.2, "Упорядочение памяти в P6 и более поздних семействах процессоров"): Чтения могут бы…
2 ответа

JMM и нежелательное использование trylock

Нежелательное использование трилока T1 T2 x = 42; while (lock.trylock()) lock.lock(); lock.unlock(); assert(x == 42); В java и C++ модели памяти позволяют x=42 перемещаться после блокировки (1). И поэтому assert может потерпеть неудачу в потоке T2. …
2 ответа

Может ли поток наблюдать нежелательные значения в объекте из-за непоследовательности памяти?

После долгих исследований я считаю, что хорошо понимаю JMM, конечно же, достаточно хорошо, чтобы понимать, что когда объект разделяется между двумя потоками, вы должны синхронизировать весь доступ на одном мониторе. Я понимаю, что если несколько акт…
05 ноя '09 в 21:06
1 ответ

Спецификация Java: читает, видит, пишет, что происходит позже в порядке выполнения

Я сейчас читаю Спецификацию языка Java. §17.4.5-1 сказал В этом исполнении операции чтения и записи происходят позже в порядке выполнения. Это может показаться нелогичным, но это допускается последовательностью "до и после". Разрешение операций чтен…
09 авг '18 в 00:57
1 ответ

Имеют ли неатомарные объекты одинаковый порядок модификации во всех потоках? (при отсутствии данных гонок)

1.10/6: Все модификации конкретного атомного объекта M происходят в определенном общем порядке, называемом порядком модификации M. Неатомарные объекты также имеют одинаковый порядок модификации во всех потоках? Меня интересуют правильно синхронизиро…
10 фев '13 в 17:49
1 ответ

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

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

Содержит ли это использование семантики выпуска / приобретения потенциальную гонку данных?

Рассмотрим следующий код, который я нашел на http://preshing.com/20120913/acquire-and-release-semantics/ (но я уверен, что часто видел его в других местах) Общий код: int A = 0; std::atomic<int> Ready(0); Код, выполняемый потоком 1: A = 42 Rea…
01 мар '14 в 18:16
1 ответ

CS против DS в защищенной плоской модели

Имеют ли одинаковые значения регистры сегментов CS & DS для данного процесса в защищенной плоской модели? Другими словами, выполните следующие кодовые последовательности в одной программе mov dword ptr [0x7fffffff], ebx а также org 0x7fffffff ...som…
05 июн '13 в 03:51
5 ответов

Стандарт C++: можно ли поднять блокированные атомарные хранилища выше блокировки мьютекса?

Есть ли в стандарте какая-либо формулировка, гарантирующая, что расслабленные хранилища для атомщиков не будут отменены над блокировкой мьютекса? Если нет, то есть ли какая-либо формулировка, в которой прямо говорится, что компилятору или процессору…
1 ответ

Модель памяти: записи активации

Я только что прочитал книгу, в которой говорится, что запись активации наверху стека (в памяти) всегда находится там, где находится точка выполнения. Поэтому мой вопрос будет таким: какая запись активации находится вверху во время параллельного выпо…
23 фев '18 в 00:51
2 ответа

Имеет ли пустая синхронизация (this){} какое-либо значение для видимости памяти между потоками?

Я прочитал это в поднятом голосовании комментарии на Stackru: Но если вы хотите быть в безопасности, вы можете добавить простой синхронизированный (this) {} в конце вашего @PostConstruct [метод] [обратите внимание, что переменные НЕ были изменчивыми…
1 ответ

Как я могу уменьшить размер мультиплексора

module memory_module (input clk,input[0:6] address,input [0:7]data_input, input read_write,output [0:7] data_output,input enable,output ready); reg ready; reg [0:7] data_output; reg [0:7] memory [127:0]; initial begin ready=0; end always @(posedge c…
08 апр '13 в 20:07
1 ответ

OpenCL 2.0 - гонка в программе только с атомами

В статье "Гетерогенные модели беспроблемной памяти" автор утверждает следующее: "... в OpenCL 2.0 можно написать программу, которая полностью состоит из атомов, если эти атомы не используют области правильно..." Как это возможно? Может кто-нибудь об…
10 авг '14 в 15:48
2 ответа

Каковы некоторые варианты использования для memory_order_relaxed

Модель памяти C++ имеет ослабленную атомарность, которая не дает никаких гарантий упорядочения операций с памятью. Кроме примера почтового ящика в C, который я нашел здесь: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1525.htm Основываясь на мот…
06 май '14 в 06:27
1 ответ

C++11: разница между memory_order_relaxed и memory_order_consume

Сейчас я изучаю модель порядка памяти C++11 и хотел бы понять разницу между memory_order_relaxed а также memory_order_consume, Чтобы быть конкретным, я ищу простой пример, где нельзя заменить memory_order_consume с memory_order_relaxed, Существует о…
09 июл '16 в 10:03
2 ответа

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

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

Заборы с неатомной физикой в ​​С11

Есть ли способ использовать ограждения, чтобы рассуждать о поведении неатомарных операций в C11? В частности, я хотел бы сделать код безопасным в ситуациях, когда необходимо заполнить определенные поля. ints для совместимости со старыми интерфейсами…
08 фев '17 в 20:05
1 ответ

Каков практический пример, где порядок получения памяти релиза отличается от последовательной последовательности?

Очевидно, что последовательные согласованные атомарные операции отличаются по своему действительному наблюдаемому поведению от операций только с получением-выпуском в действительной программе на C++. Определения даны в стандарте C++ (начиная с C++11…
25 янв '17 в 18:04
1 ответ

Будущее::wait() синхронизируется с завершением потока выполнения async()?

Говорят, что thread::join() синхронизируется с завершением соответствующего потока выполнения. Мне интересно, относится ли то же самое к async() а также future::wait(), Так, например: std::atomic_int v(0); std::async( std::launch::async, [&v] { …
07 мар '18 в 07:37
1 ответ

Могут ли нагрузки проскальзывать под операцией получения / могут ли магазины перемещаться выше выпуска в C++?

TL / DR: правда ли, что только 1 (а не 2) из ​​4 переупорядочений разрешено для операций приобретения / выпуска? Если так, то почему? На данный момент из того, что я понял о семантике acqu-release, является то, что (в основном) операция получения не…