memory-barriers 相关问题

内存屏障是一种特殊的处理器指令,它对内存访问在多处理器或多核系统中的其他处理器/内核可见的顺序施加限制。

两个原子加载之间的重新排序

我有以下程序: int 正常数据[2]; std::atomic 计数器 {0}; // 线程A: //写入新数据 正常数据[(计数器+1)%2]=新数据; counter.fetch_and_add(1, std::

回答 1 投票 0

arm gcc:没有易失性的商店排序?

我尝试使用共享索引来指示数据已写入共享循环缓冲区。有没有一种有效的方法可以在 ARM 上执行此操作(arm gcc 9.3.1 for cortex M4 with -O3)而不使用...

回答 1 投票 0

混合有/无条件的内存顺序

请考虑以下事项: std::atomic_bool 已禁用; int 计数器1、计数器2; [主题 1] 计数器2 = ...; if (disabled.load(std::memory_order::acquire) && counter2 > counter1) //#1 {

回答 1 投票 0

如果我们可以确保只有两个线程可以访问它,如何创建比 ReentrantLock 更好的锁?

我想实现一个特定的锁,它的功能就像ReentrantLock,但保证该锁只能被两个线程访问。 我注意到在 ReentrantLock 或其他

回答 1 投票 0

同步块的对象参数是否保证可见性 Synchronized Java

我无法找到以下情况的答案: 公共类示例{ 整数a=0; 公共同步无效方法(对象x){ 一个++; x.值=x.值+1; } } 我知道...

回答 1 投票 0

使用内存屏障需要这些代码(并发C代码)吗?

我在项目 libuv 1.3.0 中找到了这些代码。但我不明白为什么需要内存屏障(对于编译器)。 静态 int uv__async_make_pending(int* 挂起) { /* 首先进行简单的阅读。 */ ...

回答 1 投票 0

原子操作的内存顺序

我想建立一个关于 std::memory_order_seq_cst、std::memory_order_relaxed、memory_order_acq_rel 的良好心理形象。 将您的代码想象为一系列砖块。每块砖块都是对某些

回答 1 投票 0

同步锁之外的Java内存可见性

synchronized锁是否保证下面的代码总是打印'END'? 公开课可见性{ 私有静态 int i = 0; public static void main(String[] args) 抛出

回答 1 投票 0

vulkan 中的连续计算内核

我有三个计算内核,它们必须连续运行、同步,以便前一个内核在下一个内核启动之前完成。 这是因为以前的内核写入的缓冲区是

回答 1 投票 0

对同一对象重新排序宽松的原子操作

http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync 假设 x 最初为 0: -线程1- x.store(1,内存顺序放宽) x.store(2,内存顺序放宽) -线程2- y = x.load (内存_顺序_放松...

回答 1 投票 0

LFENCE 是否在 AMD 处理器上进行序列化?

在最近的 Intel ISA 文档中,lfence 指令被定义为序列化指令流(防止指令流中的乱序执行)。特别是

回答 2 投票 0

一致性协议和存储缓冲区

考虑下面的代码: std::atomic a = 100; --- 中央处理器0: a.store(101, std::memory_order_relaxed); --- 中央处理器1: int tmp = a.load(std::memory_order_relaxed); // 假设 `tmp` 是 101。 让我们...

回答 1 投票 0

为什么更新ARM gic ICC_PMR寄存器后需要DSB SY?

在 Linux 内核中,如果 ICC_CTLR_EL1.PMHE == 0b1,则更新 SYS_ICC_PMR_EL1 后会跟随 DSB SY。 ./arch/arm64/include/asm/irqflags.h: 45 write_sysreg_s(GIC_PRIO_IRQON,SYS_ICC_PMR_...

回答 1 投票 0

Vulkan 同步:避免写后写危险,为什么这是正确的?

在问题中:“第一个渲染通道写入深度附件。第二个渲染通道重新使用相同的深度附件。” 我看到官方维基(vulkan wiki)说: 这是一个例子...

回答 1 投票 0

实际上谁在 MPCore 中乱序访问内存?

根据我目前对 ARM Cortex A57 和 A78 TRM 的理解,微操作可以乱序发送到多个执行管道中的 1 个。 这是独立

回答 1 投票 0

共享内存linux变量多进程同步为什么会出错? [重复]

我创建共享内存,用于进程间共享数据。共享内存使用数据结构保存数据: 结构 shared_cfg { 易失性 uint32_t idx; 易失性 uint32_t cfg_lock; ...

回答 0 投票 0

Java中volatile write前为什么没有LoadStore barrier(JSR-133排序规则)

The JSR-133 Cookbook for Compiler Writers”中列出的 JMM 规则声明 Normal Load 和 Normal Store 不能在它们之后用 volatile-Store 重新排序。为此,他们发布了一个 StoreStore

回答 0 投票 0

原子操作有内存顺序问题吗?

原子操作之间是否存在关系,例如原子也需要内存顺序?对于代码: 静态整数零 = 0; static int proc_enter(struct proc_context* ctx, st...

回答 0 投票 0

C11内存栅栏和原子操作

我正在研究记忆障碍。 我对以下代码有一些疑问。 //版本 1 线程 A: *val = 1; atomic_thread_fence(memory_order_release); atomic_store_explicit(发布...

回答 1 投票 0

Interlocked.Exchange影响以下指令

如果线程 1 运行: this.Field.Flag = false; ... var oldValue = Interlocked.Exchange(ref this.Field, newValue); oldValue.Flag = true; 并且线程 2 看到 oldValue.Flag == true,是否保证...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.