Casos reais de uso de barreiras (DSB, DMB, ISB) em ARM
Eu entendo que DSB, DMB e ISB são barreiras para evitar a reordenação de instruções. Eu também posso encontrar muitas explicações muito boas para cada um deles, mas é muito difícil imaginar o caso que eu tenho que usá-los.
Além disso, a partir dos códigos-fonte abertos, vejo essas barreiras de tempos em tempos, mas é muito difícil entender por que elas são usadas. Apenas por exemplo, na função tcp_rcv_synsent_state_process do kernel Linux 3.7, existe uma linha como a seguir:
if (unlikely(po->origdev))
sll->sll_ifindex = orig_dev->ifindex;
else
sll->sll_ifindex = dev->ifindex;
smp_mb();
if (po->tp_version <= TPACKET_V2)
__packet_set_status(po, h.raw, status);
onde smp_mb () é basicamente DMB. Você poderia me dar alguns dos seus exemplos da vida real? Ajudaria a entender mais sobre barreiras.