保证内存排序和正确的编程实践
关于我在下面描述的顺序,我有一些相关的问题。
鉴于这些排序保证,我在许多地方不需要明确的围栏。但是,如何向编译器表达“栅栏”,特别是GCC?也就是说,只要优化器不重新排序我的程序,程序顺序的保证才适用。
是否有普通/流行的新芯片使用通用内核而不提供此类保证?
我在C ++ 0x中对它的交错思想感到有点困惑。我必须使用“原子”类来利用这些保证,还是草案中还有其他一些方面也提供了一种利用这些保证的方法?
记忆订购
英特尔和AMD(至少使用x86_64)都保证内存负载与单处理器上的存储操作相关。也就是说,如果某个处理器执行这些存储:
商店A< - 1
商店B< - 2
商店C< - 3
一些其他处理器看到C(3)的那一刻,它保证也能看到先前的存储A(1)和B(2)。现在,处理器之间的可见性可以是交错的,但来自任何给定处理器的存储顺序也将是顺序的。
当处理器0读取处理器1存储的值,然后写入一个值时,它们也具有传递保证,读取新值的处理器2也必须从处理器1中看到该值。
忽略处理IO和特殊设备的特殊情况。我只对一般的内存保证感兴趣:我的排序只是我最感兴趣的一点,因为它对并发算法最重要。
没有找到相关结果
已邀请:
3 个回复
娠频摩
纤洞需匪
块并明确写出
指令。
抢垢洛韧
及相关课程 原子变量 -
明确的记忆障碍 -
。 后两者接受一个内存顺序参数,允许在不保证顺序一致性的平台上具有额外的灵活性(仅限专家!),但这与x86无关。