Я понимаю, что 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. Не могли бы вы дать мне некоторые из ваших реальных примеров? Это поможет лучше понять барьеры.