Барьеры памяти и модели расслабленной памяти - PullRequest
0 голосов
/ 22 августа 2011

В настоящее время я пытаюсь улучшить мое понимание барьеров памяти, блокировок и модели памяти.

Насколько я знаю, существует четыре различных типа расслаблений: namley Write -> Read, Write -> Write, Read-> Написать и прочитать -> Читать.Процессор x86 допускает просто расслабление Write-> Read, которое часто называют Total Store Order (TSO).Частичный порядок хранения (PSO) позволяет дополнительно ослаблять запись-> запись, а расслабленный порядок хранения (RSO) допускает все вышеперечисленные ослабления.

Кроме того, существуют три типа барьеров памяти: освобождение, получение и оба вместе.Блокировки могут использовать только барьеры получения и освобождения или иногда полные барьеры (.Net).

Теперь рассмотрим следующий пример:

// thread 0
x = 1
flag = 1

//thread 1
while (flag != 1);
print x

Мое текущее понимание говорит мне, что мне не нужна дополнительная памятьбарьеры, если я запускаю этот код на машине TSO.Если это PSO-машина, мне нужен барьер освобождения между x = 1 и flag = 1, чтобы поток 1 получил действительное значение x, если flag = 1.Если это RSO-машина, мне нужен дополнительный барьер для получения между while (flag! = 1);и выведите x, чтобы поток 1 не считал значение x на ранний срок.

Верны ли мои наблюдения?

1 Ответ

0 голосов
/ 01 сентября 2011

Я думаю, что ваш пример кода близок к одному в этом вопросе

При этом для RSO вам нужно больше барьеров памяти, чем вы описываете, более конкретно, например, тот, который обеспечивает гарантию свежести для потока 1 до того времени.

Я не уверен насчет TSO и PSO, надеюсь, это может быть полезно, потому что я также пытался понять барьеры памяти в этом вопросе и пару связанных с этим проблем

...