Casos de uso de la vida real de barreras (DSB, DMB, ISB) en ARM
Entiendo que DSB, DMB e ISB son barreras para prevenir la reordenación de las instrucciones. También puedo encontrar muchas explicaciones muy buenas para cada uno de ellos, pero es bastante difícil imaginar el caso en el que tengo que usarlos.
Además, de los códigos de código abierto, veo esas barreras de vez en cuando, pero es bastante difícil entender por qué se usan. Solo para un ejemplo, en la función tcp_rcv_synsent_state_process del kernel 3.7 de Linux, hay una línea como la siguiente:
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);
donde smp_mb () es básicamente DMB. ¿Podría darme algunos de sus ejemplos de la vida real? Ayudaría a entender más sobre las barreras.