правильно использовать барьеры памяти - PullRequest
0 голосов
/ 20 января 2020

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

Мне, вероятно, удалось понять освобождение и приобрести достаточно, чтобы иметь возможность правильно или, по крайней мере, более правильно использовать или понимать изменчивые поля. Моя проблема - использование барьеров с полной памятью. Например, вот ссылка на некоторое описание: https://afana.me/archive/2015/07/10/memory-barriers-in-dot-net.aspx/

В разделе, называемом «когерентность кэша», есть пример, когда cpu2 может не увидеть хранилище до y даже когда барьер памяти выполняется после барьера памяти процессора1. Я понимаю, что здесь происходит, скорее всего. Но фиксированный пример содержит два барьера памяти, дополнительный - после обоих хранилищ в cpu1 и перед обоими загрузками в cpu2. Мой конкретный c вопрос здесь: не достаточно ли добавить барьер до обеих загрузок и после обоих магазинов, но удалив этот промежуточный? почему, почему нет? Вероятно, у меня возникнет более связанный вопрос, так как это нелегко понять даже теоретически ...

...