memory-barriers 相关问题

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

为什么这个获取和释放内存栅栏没有给出一致的值?

我只是在探索获取和释放内存栅栏的使用,不明白为什么我有时会将值输出为零而不是始终为 2 我运行了该程序多次...

回答 4 投票 0

在 x86 上发送 IPI 后内存写入是否可见?

我已经阅读了Intel 64 and IA-32 Architectures SDM vol 3A, 9.2 MEMORY ORDERING,但是有一个问题一直困扰着我。 如果我首先写入内存地址,然后发送处理器间

回答 3 投票 0

使用 memory_order_relaxed 复制竞争条件

无效experiment_relaxed() { 原子 x; 原子 y; 自动写入 = [&x, &y]() { y.store(10, memory_order_relaxed); x.store(1, memory_order_relaxed); ...

回答 1 投票 0

`std::memory_order`是编译器在编译时的特殊标签吗?

传递给原子操作的 std::memory_order 类型的参数会影响编译时和运行时。不过,我想知道这个类型是否是编译器的特殊标记。换句话说,当给予...

回答 1 投票 0

关于内存屏障

在NUMA多CPU架构中,a的初始值为0,并且在CPU-x和CPU-y之间处于共享状态。在时间 t0,CPU-x 执行 a = 1,紧接着执行 smp_wmb,然后在 a...

回答 1 投票 0

具有多个存储的内存顺序

考虑下面的例子。假设屏障初始化为 0。 有一个生产者线程和两个消费者线程不断检查屏障。如果设置了障碍,它们就会减少 runcnt...

回答 1 投票 0

失败排序与 x86 原子操作相关吗?

考虑compare_and_exchange_strong_explicit的定义: _Boolatomic_compare_exchange_strong_explicit( 易失性 A* obj, C* 期望,C 渴望...

回答 1 投票 0

为什么c++11的std::mutex没有内存顺序?

我的意思是与c++11atomic相比,例如: #包括 #包括 #包括 std::atomic 计数器(0); 无效增量计数器(){ 对于(int...

回答 1 投票 0

为什么加载-加载控制依赖需要完整的读内存屏障

为什么内核文档中需要完全读取内存屏障 Documentation/memory-barriers.txt:709: q = READ_ONCE(a); 如果(q){ // 为什么? p = READ_ONCE(b); } ...

回答 1 投票 0

为什么单核CPU不会出现指令重排序问题?

来自这篇文章: 在单个 CPU 核心上进行时间切片的两个线程不会遇到重新排序问题。单个核心始终知道自己的重新排序,并将正确解析自己的所有内存...

回答 2 投票 0

是否可以保证读取-修改-写入操作在弱内存模型上读取(并返回)正确的旧值?

假设我有以下代码,它利用 RMW 操作,并在 WMM CPU 上执行(例如,在 ARM 上): std::atomic 共享; std::atomic t0_is_last; std::atomic&l...

回答 1 投票 0

为什么 std::memory_order_acq_rel 在 C++11 中总是触发警告?

我的编译器是clang 18.1.0-rc1;以下代码会触发两个警告: #包括 std::atomic n; int main() { // 警告:原子操作的内存顺序参数...

回答 1 投票 0

这种获取-释放关系是如何运作的?

在 Rust Atomics 和 Locks 中,建议使用或多或少的以下代码来正确实现简化 Arc 的 drop 特征:(代码是我的) 不安全{ 如果 1 == (*自己...

回答 1 投票 0

Mutex 和 CPU 缓存(和内存栅栏)的关系

假设我有一个具有多个线程的应用程序需要访问一些共享数据。 我知道可以使用互斥锁(关键部分)来确保一次最多有一个线程可以访问

回答 1 投票 0

为什么 StoreLoad 比其他屏障类型更贵?

已经有人问为什么 StoreLoad 屏障很昂贵,答案解释说它很昂贵,因为 StoreLoad 屏障阻塞了 Load,直到(可能很昂贵)Store

回答 1 投票 0

memory_order:获取/释放反转模式

可能很蠢,但与其被问到,不如后悔一辈子。 std::atomic::load 和 std::atomic::store 的标准模式是 像这样的东西 注意:假设在所有前...

回答 1 投票 0

对于 Arm64,TTAS 自旋锁中 `memory_order_relaxed` 如何足够?

考虑以下自旋锁的实现(Google 中关于查询“c++ 自旋锁实现”的第一个链接): 结构自旋锁{ std::atomic lock_ = {0}; void lock() noexce...

回答 1 投票 0

Arm64 的 TTAS 自旋锁中的 `memory_order_relaxed` 是否足够?

考虑以下自旋锁的实现(Google 中关于查询“c++ 自旋锁实现”的第一个链接): 结构自旋锁{ std::atomic lock_ = {0}; void lock() noexce...

回答 1 投票 0

_mm_mfence() 函数做什么

查看Intel Intrinsics文档,_mm_mfence的概要如下 对发出的所有从内存加载和存储到内存的指令执行序列化操作...

回答 1 投票 0

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

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

回答 1 投票 0

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