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.

questionAnswers(3)

yourAnswerToTheQuestion