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