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 |
Forest Lam · 我应该怎么做才能在这里看到分布式驱动器段? 1 年前 |
Andrew · 我需要帮助为这个问题编写代码 2 年前 |
Gen Tan · 节点-v显示节点的旧版本 2 年前 |
xdavidliu · XCode项目对C++标准的选择没有得到尊重 2 年前 |
Yannick · Ruby(或FFI?)执行Jekyll命令时出错 2 年前 |
FreyGeospatial · 显示Mac终端中隐藏的文件和文件夹 2 年前 |
viedev · SwiftUI:macOS上文本字段中文本过长的问题 2 年前 |