atomic相关内容

AtomicInteger 的实际用途

我有点理解 AtomicInteger 和其他 Atomic 变量允许并发访问.在什么情况下通常使用这个类? 解决方案 AtomicInteger 主要有两个用途: 作为一个原子计数器(incrementAndGet()等),可以被多个线程同时使用 作为支持 compare-and-swap 指令的原语(compareAndSet()) 来实现非阻塞算法. 以下是来自 的 ..
发布时间:2021-11-25 14:46:58 Java开发

32/64 位 jvm 上的 java 原语的大小?

int 的大小为 32 位,long/double 为 64 位.这些尺寸会保持不变吗 32/64 位 JVM 32/64 位处理器 如果是,那么 long/double 上的操作是否在 64 位处理器/JVM 上是原子的? Oracle Java 教程: 读取和写入对于引用变量和大多数原始变量(除 long 和 double 之外的所有类型)都是原子的. 这个说法和j ..
发布时间:2021-11-25 05:47:55 Java开发

在 64 位 CPU 上读/写 64 位值是原子的吗?

在 32 位机器上,在 .net 中读取和写入 64 位值曾经是非原子的,即在读取时,我可以读取一个从未写入内存的值,由一个较旧的 32-一半,新的一半. 但是在 64 位 CPU 上读/写是原子的吗? 如果是这样,(Windows) 操作系统是否也必须是 64 位的? 如果是这样,应用程序是否也必须是 64 位 .net 版本? 解决方案 来自 这个答案,如果你在一个 64 位 ..
发布时间:2021-11-25 00:18:04 C#/.NET

ARM STLR 内存排序语义

我正在为 ARM STLR 的确切语义而苦苦挣扎. 根据文档,它具有发布语义.所以如果你有 STLR 存储,你会得到: [StoreStore][LoadStore]X=r1 其中 X 是内存,r1 是一些寄存器. 问题在于发布存储和获取加载,无法提供顺序一致性: [StoreStore][LoadStore]X=r1r2=Y[加载加载][加载存储] 在上述情况下,允许重新排序 ..
发布时间:2021-11-17 22:46:36 其他开发

ARM64:LDXR/STXR 与 LDAXR/STLXR

在 iOS 上,有两个类似的函数,OSAtomicAdd32 和 OSAtomicAdd32Barrier.我想知道您什么时候需要 Barrier 变体. 拆解后,它们是: _OSAtomicAdd32:ldxr w8, [x1]添加 w8, w8, w0stxr w9, w8, [x1]cbnz w9, _OSAtomicAdd32移动 x0, x8回复_OSAtomicAdd32Bar ..
发布时间:2021-11-17 22:44:00 其他开发

可以原子地读取压缩结构内的变量吗?

我正在为 Cortex M0 (ARM) CPU 编写代码,并且 32 位读/写是原子的.现在我想知道当我读/写 8bit/16bit 变量时,它们是否也保证是原子的?我的直觉是肯定的,因为它们在内部对齐到 32 位部分,因此 CPU 不可能需要两条单独的指令来读取/写入它们. 但我也碰巧在压缩结构中存储了很多变量以节省内存,并且有可能变量没有在 32 位边界上对齐,因此 16 位值的每一半 ..
发布时间:2021-11-17 22:29:00 其他开发

ARM STLR 内存排序语义

我正在为 ARM STLR 的确切语义而苦苦挣扎. 根据文档,它具有发布语义.所以如果你有 STLR 存储,你会得到: [StoreStore][LoadStore]X=r1 其中 X 是内存,r1 是一些寄存器. 问题在于发布存储和获取加载,无法提供顺序一致性: [StoreStore][LoadStore]X=r1r2=Y[加载加载][加载存储] 在上述情况下,允许重新排序 ..
发布时间:2021-11-17 22:27:35 其他开发

ARM 单拷贝原子性

我目前正在浏览 ARMv7 内核的 ARM 架构手册.在关于内存访问原子性的章节 A3.5.3 中,它指出: 如果单拷贝原子加载与单拷贝原子存储重叠并且对于任何重叠字节,负载返回写入的数据写入插入到该字节的 Coherence 顺序中单拷贝原子存储然后加载必须从一个点返回数据在 Coherence 顺序中不早于插入到所有数据的单副本原子存储的一致性顺序重叠字节. 作为非英语母语者,我承 ..
发布时间:2021-11-17 22:20:01 其他开发

PCIe 总线上的写入是原子的吗?

我是 PCIe 的新手,所以这可能是一个愚蠢的问题.这似乎是询问有关 PCIe 接口的相当基本的信息,但我很难找到答案,所以我猜我遗漏了一些使答案显而易见的信息. 我有一个系统,其中有一个 ARM 处理器(主机)通过 PCIe(设备)与 Xilinx SoC 通信.SoC 内的端点也是 ARM 处理器. 外部 ARM 处理器(主机)将通过 PCIe 写入 SoC 的 ARM 处理器(设 ..
发布时间:2021-11-17 22:19:59 其他开发

ARM LL/SC 通过寄存器宽度或缓存线宽度独占访问?

我正在开发我的无锁数据结构库的下一个版本,在 ARM 上使用 LL/SC. 对于我的 LL/SC 用例,我需要将它与 LDREX 和 STREX 之间的单个 STR 一起使用.(而不是用它来模拟 CAS.) 现在,我已经编写了代码并且可以运行.然而,我担心的是它可能并不总是有效.我在 PowerPC 上读过,如果您访问与 LL/SC 目标相同的缓存行,则会破坏 LL/SC. 所以 ..

ARM64:LDXR/STXR 与 LDAXR/STLXR

在 iOS 上,有两个类似的函数,OSAtomicAdd32 和 OSAtomicAdd32Barrier.我想知道您什么时候需要 Barrier 变体. 拆解后,它们是: _OSAtomicAdd32:ldxr w8, [x1]添加 w8, w8, w0stxr w9, w8, [x1]cbnz w9, _OSAtomicAdd32移动 x0, x8回复_OSAtomicAdd32Bar ..
发布时间:2021-11-17 21:51:41 其他开发

ARM:是“STMDB SP!,{R0-R8}"吗?(又名 PUSH {R0-R8})原子操作?

我想知道 STMDB SP!, {R0-R8} 是否是 ARM(v7) 中的原子操作,因为在我看来它非常复杂.那么,例如,CPU 是否可能在“中间"某处中断并且已经将 R5-R8 存储在堆栈中,而 SP 现在是 SP_old - 16,并且在处理中断后处理器继续 R0-R4?谢谢. 解决方案 为了澄清这里稍微令人困惑的答案组合,首先;v7-A1: 在标准配置中唯一可以中断多路访问指令 ..
发布时间:2021-11-17 21:48:07 其他开发

ARM:从 int 写入/读取是原子的吗?

在 ARM 架构上,不幸的是我不知道它到底是什么芯片,是 32 位 int 读/写原子吗? 对基本类型的读/写是否有任何保证? 解决方案 它应该是原子的,除非该 int 存储在未对齐的地址上. ..
发布时间:2021-11-17 21:44:03 其他开发

STM32 微控制器上哪些变量类型/大小是原子的?

以下是 STM32 微控制器上的数据类型:http://www.keil.com/support/man/docs/armcc/armcc_chr1359125009502.htm. 这些微控制器使用 32 位 ARM 内核处理器. 哪些数据类型具有自动原子读和原子写访问? 我很确定所有 32 位数据类型都可以(因为处理器是 32 位),而所有 64 位数据类型都不是(因为读取或 ..
发布时间:2021-11-17 21:43:00 其他开发

ARM 中的原子操作

我一直在为 ARM 开发嵌入式操作系统,但是即使在参考了 ARMARM 和 linux 源代码之后,我也有一些关于架构的事情我不明白. 原子操作. ARM ARM 说 Load 和 Store 指令是原子的,它的执行保证在中断处理程序执行之前完成.验证通过查看 arch/arm/include/asm/atomic.h :#define atomic_read(v) (*(volat ..
发布时间:2021-11-17 21:42:26 其他开发

C++ 递减单字节(易失性)数组的元素不是原子的!为什么?(另外:我如何在 Atmel AVR mcus/Arduino 中强制原子性)

我只是浪费了几天,实际上是大约 25 小时的工作,因为我试图通过一些我不知道的简单事情来调试我的代码. 事实证明,在 AVR ATmega328 8 位微控制器 (Arduino) 上,在 C++ 中递减单字节数组的元素不是原子操作,并且需要原子访问保护(即关闭中断).为什么是这样???此外,确保原子访问 Atmel AVR 微控制器上的变量的所有 C 技术是什么? 这是我所做的简化版 ..
发布时间:2021-11-17 03:35:04 C/C++开发

将文本文件的内容附加到 C++ 中的另一个文件

如何在 C++ 中打开一个文本文件并将其所有行附加到另一个文本文件中?我找到的主要解决方案是分别从文件读取到字符串,以及从字符串写入文件.这可以优雅地结合起来吗? 并不总是给出两个文件都存在的情况.访问每个文件时应该有一个 bool 返回. 如果这已经偏离主题,我很抱歉:是否将文本内容附加到文件中没有冲突,这意味着多个程序可以同时执行此操作(行的顺序无关紧要)?如果不是,那么(原子)替 ..
发布时间:2021-11-16 19:29:37 C/C++开发