Przypadki użycia barier w czasie rzeczywistym (DSB, DMB, ISB) w ARM
Rozumiem, że DSB, DMB i ISB są barierami uniemożliwiającymi zmianę kolejności instrukcji. Mogę też znaleźć wiele bardzo dobrych wyjaśnień dla każdego z nich, ale trudno sobie wyobrazić, że muszę z nich korzystać.
Ponadto z kodów otwartego źródła widzę te bariery od czasu do czasu, ale trudno jest zrozumieć, dlaczego są one używane. Na przykład w jądrze Linuksa 3.7 funkcja tcp_rcv_synsent_state_process znajduje się następująca linia:
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);
gdzie smp_mb () jest w zasadzie DMB. Czy mógłbyś podać mi kilka przykładów z życia? Pomogłoby to lepiej zrozumieć bariery.