リンク リストを使用して非ロック FIFO を実装しています。
Enqueue
FIFO の基本は次のとおりです。
void Enqueue(CNode node)
{
m_tail->m_next = node;
// Do I need a memory barrier here?
m_tail = node;
}
シングルスレッドの場合、メモリバリアを追加する必要があるかどうか疑問に思っています(つまり、コンパイラ/プロセッサは上記の2行の順序を再配置できますか?)。マルチスレッドの場合 (つまり、シングル リード シングル ライターの場合と同じくらい単純) はどうでしょうか。
編集: hereによると、これはデータの反依存関係のケースであり、ステートメントを並べ替えるべきではありません。したがって、CPUは常に指定された順序でメモリにアクセスする必要があると思います。そうですか?