Одновременная запись в разные места в одной строке кэша

Предположим, у меня есть приложение на C ++ 11, в котором два потока пишут другой, но рядом места в памяти, используя простые указатели на примитивные типы. Могу ли я быть уверен, что обе эти записи в конечном итоге окажутся в памяти (возможно, после того, как обе boost::barrier), или есть риск, что оба ядра ЦП будут иметь свою собственную строку кэша, содержащую эти данные, и второе ядро, сбрасывающее свою модификацию в ОЗУ, перезапишет и отменит модификацию, выполненную при первой записи?

Я надеюсь, что согласованность кэша позаботится об этом для меня во всех ситуациях и на всех установках, совместимых с моделью памяти C ++ 11, но я хотел бы быть уверен.

6

Решение

Да, механизмы когерентности кэша позаботятся об этом. Это называется Ложный обмен и следует избегать лучшего разделения данных для повышения производительности.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]