memory-barriers 相关问题

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

通过使用原子操作作为更高级别同步设施的基础来排序非原子操作

我首先引用Anthony Williams的“C ++并发行动”中的一些描述:class spinlock_mutex {std :: atomic_flag flag; public:spinlock_mutex():flag(ATOMIC_FLAG_INIT){} ...

回答 3 投票 0

加载和存储是否只有重新排序的指令?

我已经阅读了很多关于内存排序的文章,并且所有这些文章都只说CPU重新加载和存储。 CPU(我对x86 CPU特别感兴趣)只重新加载加载和存储,并且......

回答 2 投票 5

lock xchg与mfence具有相同的行为吗?

我想知道的是,如果一个线程访问一个正在被其他线程突变的内存位置(让我们随便说),那么lock xchg会对mfence产生类似的行为。 ...

回答 1 投票 7

x86 CPU有多少个内存屏障指令?

我发现x86 CPU有以下内存屏障指令:mfence,lfence和sfence。 x86 CPU是否只有这三个内存屏障指令,还是有更多?

回答 2 投票 2

哪个是x86上更好的写屏障:lock + addl还是xchgl?

Linux内核使用锁; addl $ 0,0(%% esp)作为写屏障,而RE2库使用xchgl(%0),%0作为写屏障。有什么区别,哪个更好? x86还需要读屏障吗?

回答 5 投票 22

x86 mfence和C ++内存屏障

我正在检查编译器如何在x86_64上发出多核内存屏障的指令。下面的代码是我正在使用gcc_x86_64_8.3测试的代码。的std ::原子 flag {false}; int ...

回答 2 投票 4

为什么GCC使用mov / mfence而不是xchg来实现C11的atomic_store?

在C ++和2012之后:Herb Sutter - 原子<>武器,Herb Sutter中的2个(约0:38:20)认为应该使用xchg,而不是mov / mfence来在x86上实现atomic_store。他似乎也......

回答 1 投票 11

为什么要清除其他逻辑处理器导致的内存订单违规管道?

内存订购机器清除性能事件由vTune文档描述为:当来自另一个处理器的监听请求与...匹配时,内存排序(MO)机器清除发生。

回答 1 投票 5

rcu_read_lock和x86-64内存排序

在可抢占的SMP内核上,rcu_read_lock编译以下内容:current-> rcu_read_lock_nesting ++;屏障();屏障是编译器指令,编译为空。所以,根据......

回答 1 投票 1

Java内存障碍和可见性

我很困惑当内存屏障被触发时会发生什么,我认为这也用于获得与主内存的缓存一致性,但我进行了测试,结果我认为是...

回答 1 投票 0

Volatile.Write新鲜保证

Volatile.Write的文档说明如下:将指定的对象引用写入指定的字段。在需要它的系统上,插入一个阻止...的内存屏障

回答 2 投票 2

mfence和asm volatile之间的差异(“”:::“memory”)

据我所知,mfence是一个硬件内存屏障,而asm volatile(“”:::“memory”)是一个编译器障碍。但是,可以使用asm volatile(“”:::“memory”)代替mfence。 ......

回答 3 投票 20

原子载荷和存储与内存顺序放松

在我看到的任何地方,我都看到强烈的建议不要使用宽松的内存顺序,我想知道下面这段代码是否会起作用,或者有什么......

回答 1 投票 2

如何通过按顺序提交load-> store重新排序?

ARM允许使用后续存储重新排序加载,以便执行以下伪代码:// CPU 0 | // CPU 1 temp0 = x; | temp1 = y; y = 1; | x = 1;可以导致temp0 == temp1 == 1(...

回答 1 投票 6

如何测试std :: memory_order_relaxed的行为?

我已经阅读了std :: memory_order_relaxed的文档。松弛排序的一部分解释是...... //线程1:r1 = y.load(memory_order_relaxed); //一个x.store(r1,memory_order_relaxed); // B // ......

回答 2 投票 5

在我们启动多线程代码之前进行初始化

int main(){// X是共享资源initSharedResourceX(); startMultitreadingServer(); //与函数句柄()同时处理请求

回答 1 投票 0

乱序执行和记忆围栏

我知道现代CPU可以无序执行,但是他们总是按顺序退出结果,如维基百科所述。 “Out of Oder处理器及时填补了这些”插槽“......

回答 3 投票 10

C#可以写指令从finally块重新排序到try块吗?

在一篇关于具有乐观重试的可伸缩读写器方案的文章中,有一个代码示例:using System;使用System.Threading;公共类OptimisticSynchronizer {private volatile ...

回答 1 投票 1

如何在x86上使用gcc强制执行内存排序

我想在线程(gcc,Linux,x86)之间共享数据结构。假设我在线程A中有以下代码:shared_struct-> a = 1; shared_struct-> b = 1; shared_struct-> enable = true; ...

回答 2 投票 2

共享指针析构函数中的内存顺序

我试图找出共享指针析构函数最放松(和正确)的内存顺序。我现在想到的是:~shared_ptr(){if(p){if(p-> cnt.fetch_sub(...

回答 1 投票 6

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