Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
当内存排序放宽时,C++ 延迟会增加
我在 Windows 7 64 位 VS2013 x64 发行版 上尝试内存排序 我想使用最快的同步来共享对容器的访问 我选择了原子比较和交换 我的程序产生两个线程 写入器推送到向量 读取器检测到这一点 最初我没有指定任何内存顺序 所以我假
c
performance
C11
x86
memorybarriers
mfence 和 asm 易失性 ("" : : : "内存") 的区别
据我了解 mfence是硬件内存屏障 而asm volatile memory 是编译器障碍 但是 可以asm volatile memory 用来代替 mfence 我感到困惑的原因是这个链接 http gcc gnu org ml gc
gcc
x86
memorybarriers
原子的 C++ 内存屏障
在这方面我是个新手 谁能提供以下内存屏障之间差异的简化解释 窗户MemoryBarrier 围栏 mm mfence 内联汇编asm volatile memory 内在的 ReadWriteBarrier 如果没有简单的解释 一些好文章或
c
Windows
visualc
memorybarriers
内存屏障:软件黑客的硬件视图示例 3
我正在从原始论文中复制该图的文本 内存屏障 软件黑客的硬件视图 http www rdrop com 7Epaulmck scalability paper whymb 2010 06 07c pdf 表 4 显示了由 CPU 0 1 和
memorybarriers
缓存一致性是否始终可以防止读取过时的值?失效队列允许吗?
在 MESI 协议中 仅当将缓存行保持在独占 修改状态时才写入缓存行 要获取独占状态 您可以向持有同一高速缓存行的所有核心发送无效请求 但是是否存在一种微架构 其中某些内核会在实际使缓存线无效之前做出确认响应 如果确实如此 那不是违反了缓存
caching
cpuarchitecture
cpucache
memorybarriers
MESI
为什么这个“std::atomic_thread_fence”起作用
首先我想谈一下我对此的一些理解 如有错误请指正 a MFENCE在x86中可以保证全屏障 顺序一致性可防止 STORE STORE STORE LOAD LOAD STORE 和 LOAD LOAD 重新排序 这是根据维基百科 https
c
x86
memorybarriers
stdatomic
假设没有非时间指令,“xchg”是否包含“mfence”?
我已经看过了这个答案 https stackoverflow com a 50279772 391161 and 这个答案 https stackoverflow com a 19099164 391161 但似乎都没有清楚明确地说明等价或
Multithreading
Assembly
x86
intel
memorybarriers
原子发布可以被“覆盖”吗?
说我有atomic
c
atomic
stdatomic
memorybarriers
std::mutex 会创建栅栏吗?
如果我锁定一个std mutex我总会得到一个记忆栅栏吗 我不确定这是否暗示或强迫你获得栅栏 Update 根据 RMF 的评论找到了这个参考资料 多线程编程和内存可见性 http en wikipedia org wiki Memory
c
Multithreading
mutex
memorybarriers
memorymodel
std::memory_order_seq_cst 的工作原理
我从以下位置获取了有关 std memory order seq cst 的示例 http en cppreference com w cpp atomic memory order http en cppreference com w c
c
C11
memorybarriers
memorymodel
stdatomic
屏障/栅栏以及获取、释放语义是如何在微架构上实现的?
很多问题以及文章 书籍 例如https mirrors edge kernel org pub linux kernel people paulmck perfbook perfbook 2018 12 08a pdf https mirr
x86
x8664
cpuarchitecture
memorybarriers
microarchitecture
使用 4 个线程获取/释放语义
我目前正在阅读 Anthony Williams 撰写的 C Concurrency in Action 他的清单之一显示了这段代码 他指出以下断言z 0可以开火 include
c
Multithreading
memorybarriers
memorymodel
stdatomic
并发互锁和读取是否需要内存屏障或锁定?
这是一个简单的问题 但是读完之后为什么需要内存屏障 https stackoverflow com questions 3493931 why do i need a memory barrier我对此很困惑 在下面的示例中 假设不同的线程
c
Multithreading
threadsafety
sharedmemory
memorybarriers
忙等待循环中是否需要内存屏障或原子操作?
考虑以下spin lock 实现 最初来自这个答案 https stackoverflow com a 32658335 3169754 void spin lock volatile bool lock for inserts an ac
c
Multithreading
gcc
memorybarriers
spinlock
除了提供必要的保证之外,硬件内存屏障是否还能使原子操作的可见性更快?
TL DR 在生产者 消费者队列中 放置不必要的 从 C 内存模型的角度来看 内存栅栏或不必要的强内存顺序是否有意义 以牺牲可能更差的吞吐量为代价获得更好的延迟 C 内存模型在硬件上执行 通过为更强的内存顺序设置某种内存栅栏 而不是在较弱的
c
x86
arm
cpuarchitecture
memorybarriers
您能否将具有更严格内存排序的原子加载存储拆分为单独的宽松加载存储以及内存屏障指令?
下面是用于跨线程数据同步的获取 释放语义的简单示例 thread 1 thread 2 data 100 flag store true std memory order release while flag load std memory
c
Multithreading
synchronization
atomic
memorybarriers
C++11 具有非原子变量的原子内存顺序
我不确定 c 11 中原子变量的内存排序保证如何影响对其他内存的操作 假设我有一个线程定期调用 write 函数来更新值 另一个线程调用 read 来获取当前值 是否能保证效果d value 之前不会看到效果a version 并且将在效果
c
Multithreading
C11
atomic
memorybarriers
C11 原子获取/释放和 x86_64 缺乏加载/存储一致性?
我正在努力理解 C11 标准的第 5 1 2 4 节 特别是释放 获取的语义 我注意到https preshing com 20120913 acquire and release semantics https preshing com
c
x8664
memorybarriers
memorymodel
stdatomic
线程安全类是否应该在其构造函数末尾有一个内存屏障?
当实现一个线程安全的类时 我是否应该在其构造函数末尾包含一个内存屏障 以确保任何内部结构在可以访问之前已完成初始化 或者消费者有责任在使实例可供其他线程使用之前插入内存屏障 简化问题 下面的代码中是否存在竞争危险 由于初始化和线程安全类的访
c
NET
Multithreading
parallelprocessing
memorybarriers
C++ 中的内存栅栏/屏障:boost 或其他库有它们吗?
这些天我正在阅读有关内存栅栏和屏障的内容 作为同步多线程代码和避免代码重新排序的一种方法 我通常在 Linux 操作系统下使用 C 进行开发 并且使用boost大量的库 但我找不到任何与之相关的类 你知道boost中是否存在栅栏的内存屏障或
Multithreading
boost
boostthread
memorybarriers
1
2
3
4
»