![]() |
1
4
atomic memory access 具有 cache coherence . 前者是在软件中构建同步原语(自旋锁、信号量和互斥)所需的硬件支持,而后者是在同一总线上工作的多个芯片(多个CPU和外围设备)的硬件支持,并且具有主存的一致视图。
不同的编译器/库提供了不同的实用程序。举个例子,
GCC intrinsics for atomic memory access
. 它们都可以归结为
compare-and-swap
或
load-linked/store-conditional
基于指令块,具体取决于平台支持。把你的资料汇编成,
您不必显式地为缓存一致性做任何事情—它都是在硬件中处理的—但它确实有助于理解它是如何工作的,以避免类似这样的事情 cache line ping-pong .
尽管如此,
aligned
单字读写
是原子的
在所有的商品平台上(如果我错了,有人纠正我)。自
这是最重要的 秩序 重要的读写操作。这就是架构内存模型的重要性所在。它规定了哪些操作可以由硬件重新排序,哪些操作不能由硬件重新排序。例如,更新一个链表—在项目本身处于一致状态之前,您不希望其他CPU看到链接的新项目。明确的 memory barriers 获得 barrier确保后续操作不会在barrier之前重新排序(假设您在项目内容之前读取链表项目指针), 释放 barrier确保以前的操作不会在barrier之后重新排序(在写入新的链接指针之前写入项内容)。
编辑:即将到来的C++ 0x标准最终解决并发性问题,请参见 Hans Boehm's C++ memory model papers |
![]() |
Radhika Kandasamy · 在文本文件中的行首添加一个单词 7 年前 |
![]() |
charpi · 安装旧版本的Emacs(19.34) 7 年前 |
![]() |
Van Peer · 查询tar和。快照目录 7 年前 |
![]() |
kvway · 最后在awk中运行[Solaris] 8 年前 |
![]() |
BKF · Unix:如何从磁带中恢复损坏的tar文件 9 年前 |
![]() |
Bad_Coder · 如何在solaris上获得完整的启动时间 9 年前 |