Condição de corrida ao acessar membros adjacentes em uma estrutura compartilhada, de acordo com a regra de codificação CERT POS49-C?

De acordo comRegra de codificação CERT POS49-C é possível que diferentes threads acessando campos diferentes da mesma estrutura possam entrar em conflito.

Em vez de campo de bits, eu uso int não assinado regular.

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;
}

Eu posso ver que mesmo int sem assinatura, ainda pode haver condição de corrida se o compilador decidir usar carregar / armazenar 8 bytes em vez de 4 bytes. Eu acho que o compilador nunca fará isso e a condição de corrida nunca acontecerá aqui, mas isso é completamente apenas o meu palpite.

Existe alguma documentação de montagem / compilador bem definida sobre esse caso? Espero que o bloqueio, que é caro, seja o último recurso quando essa situação estiver indefinida.

Para sua informação, eu uso o gcc.

questionAnswers(3)

yourAnswerToTheQuestion