Элемент массива скалярных типов является объектом скалярного типа. Поток, считывающий элементы 0 и 1, не имеет проблемы параллелизма с элементом 2 записи потока, даже если он использует одну машинную инструкцию. Элементы чтения потоков 0 и 1 имеют проблему с элементом записи потоков 1, даже если используются отдельные инструкции, если мьютекс отсутствует. Конечно, элементы чтения кода 0 и 1 не могут использовать одну инструкцию, которая читает, например, 4 элемента, а затем отбрасывают лишние данные, потому что это действительно может привести к плохому чтению из-за записи другого потока в той части, которая будет отброшена.

тим, у меня есть структура:

struct Foo {
  char a;  // read and written to by thread 1 only
  char b;  // read and written to by thread 2 only
};

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

Я думаю, однако, что поскольку char a и char b попадают в одну и ту же строку кэша, компилятор должен выполнить дополнительную синхронизацию.

Что именно здесь происходит?

Ответы на вопрос(2)

Ваш ответ на вопрос