我正在使用链表实现非锁定 FIFO。
Enqueue
FIFO的基本是:
void Enqueue(CNode node)
{
m_tail->m_next = node;
// Do I need a memory barrier here?
m_tail = node;
}
我想知道如果它是单线程的,是否需要添加内存屏障(即,编译器/处理器可以重新排列上面两行的顺序吗?)。如果它是多线程的(即,像单读单写案例一样简单)怎么办?
编辑:根据here,这是一种数据反依赖的情况,不应重新排序语句。所以我假设 CPU 应该总是按照给定的顺序访问内存。是对的吗?