Реальные варианты использования барьеров (DSB, DMB, ISB) в ARM

Я понимаю, что DSB, DMB и ISB являются барьерами для предотвращения изменения порядка команд. Я также могу найти множество очень хороших объяснений для каждого из них, но довольно сложно представить, что я должен их использовать.

Кроме того, из открытых исходных кодов я время от времени вижу эти барьеры, но довольно сложно понять, почему они используются. Для примера: в ядре Linux 3.7 с функцией tcp_rcv_synsent_state_process есть следующая строка:

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

где smp_mb () в основном DMB. Не могли бы вы привести примеры из жизни? Это поможет понять больше о барьерах.

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

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