Reale Anwendungsfälle von Barrieren (DSB, DMB, ISB) in ARM
Ich verstehe, dass DSB, DMB und ISB Hindernisse sind, um die Neuordnung von Anweisungen zu verhindern. Ich kann auch viele sehr gute Erklärungen für jeden von ihnen finden, aber es ist ziemlich schwer vorstellbar, dass ich sie verwenden muss.
Aus den Open-Source-Codes sehe ich von Zeit zu Zeit diese Barrieren, aber es ist ziemlich schwer zu verstehen, warum sie verwendet werden. Nur als Beispiel gibt es in Linux-Kernel 3.7, der Funktion tcp_rcv_synsent_state_process, die folgende Zeile:
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);
wobei smp_mb () im Grunde DMB ist. Können Sie mir einige Ihrer Beispiele aus dem wirklichen Leben nennen? Es würde helfen, mehr über Barrieren zu verstehen.