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

сно сCERT правило кодирования POS49-C Возможно, что разные потоки, обращающиеся к разным полям одной и той же структуры, могут конфликтовать.

Вместо битового поля я использую обычный unsigned int.

struct multi_threaded_flags {
  unsigned int flag1;
  unsigned int flag2;
};

struct multi_threaded_flags flags;

void thread1(void) {
  flags.flag1 = 1;
}

void thread2(void) {
  flags.flag2 = 2;
}

Я вижу, что даже для unsigned int все еще может быть состояние гонки, если компилятор решит использовать загрузку / хранение 8 байтов вместо 4 байтов. Я думаю, что компилятор никогда не сделает этого, и условия гонок здесь никогда не произойдут, но это только мое предположение.

Есть ли какая-либо четко определенная документация по сборке / компилятору в этом случае? Я надеюсь, что блокировка, которая является дорогостоящей, является последним средством, когда эта ситуация оказывается неопределенной.

К вашему сведению, я использую GCC.

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

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