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です。実際の例をいくつか教えてください。それは障壁についてもっと理解するのに役立つでしょう。