cost 120 ms
sfence文档中的“序列化操作”是什么意思? - What does “serializing operation” mean in the sfence documentation?

sfence的文档说: 对在SFENCE指令之前发出的所有存储到内存指令执行序列化操作。 “序列化操作”是什么意思? 这是否意味着要确保在先执行sfence指令之前发出的所有存储到内存的指令,然后在继续执行sfence之后的指令之前完成所有这些指令 ? ...

锁定指令是否在弱顺序访问之间提供了障碍? - Do locked instructions provide a barrier between weakly-ordered accesses?

在 x86 上, lock prefixed 指令(例如lock cmpxchg除了原子操作之外还提供屏障语义:对于写回内存区域的正常内存访问,读取和写入不会跨lock -prefixed 指令重新排序,根据第 8.2 节。英特尔 SDM 第 3 卷第 2 条: 读取或写入不能用 I/O 指令 ...

std :: mutex是否足以使所有先前的读写发生在同一线程中的所有读写之后? - Is std::mutex enough for making all prior reads-writes happen before following reads-writes all in same thread?

是否始终在写入y [100]之前将以下函数写入x [100]? 或互斥量必须始终在端点之后解锁,即使在这种单线程情况下,还是必须使用atomic_thread_fence? 我的目的是告诉CPU和编译器,不允许它们对同步点周围的任何加载/存储进行重新排序,以便在所有y数组操作开始 ...

原子写入后跟原子读取同一变量的屏障有多有效? - How effective a barrier is a atomic write followed by an atomic read of the same variable?

考虑以下: 我的想法是var的虚拟负载应防止在存储之前对foo和bar的后续变量访问进行重新排序。 似乎该代码为重新排序提供了障碍-至少在x86上,发布和获取不需要特殊的防护说明。 这是编码完整围栏(LoadStore / StoreStore / StoreLoad / L ...

C ++无锁队列因多个线程而崩溃 - C++ lockless queue crashes with multiple threads

我试图更好地理解在为多个线程编码时控制内存顺序。 过去,我经常使用互斥锁来序列化变量访问,但是我试图避免那些可能提高性能的访问。 我有一个可能由许多线程填充并由许多线程消耗的指针队列。 它在单个线程上工作正常,但是在运行多个线程时崩溃。 看起来消费者可能正在获取指针的重复副本,这导致 ...

如果在_mm_clflushopt()之后不发出_mm_sfence(),会发生什么(坏)情况? - What (bad) can happen if I don't issue _mm_sfence() after _mm_clflushopt()?

我要在释放内存之前从CPU缓存中逐出一个内存范围。 理想情况下,我只想放弃这些缓存行而不将其保存到内存中。 因为没有人会使用这些值,并且再获得该内存范围的人(在malloc() / new / _mm_malloc()等之后)将首先使用新值填充内存。 正如这个问题所暗示的那样 ,当前似乎没 ...

多线程环境(C ++)中初始化的内存语义 - Memory semantics of initialization in multithread environment (C++)

我不确定C ++初始化过程的内存语义。 假设我们有以下程序。 新线程会看到正确初始化的数组吗? 还是我需要在两者之间插入某种内存屏障。 C ++语言如何定义初始化的内存语义? 我担心的是,所有对数组a [10]的写操作都可能位于一个cpu的写缓冲区中,而我们在另一个cpu上启 ...

使先前的内存存储对后续内存加载可见 - Make previous memory stores visible to subsequent memory loads

我想将数据存储在一个大数组中, _mm256_stream_si256()在循环中调用_mm256_stream_si256() 。 据我所知,然后需要一个内存栅栏来使这些更改对其他线程可见。 _mm_sfence()的描述说 对在此指令之前发出的所有存储器到存储器指令执行序列化操 ...

C#volatile变量:内存栅栏VS. 高速缓存 - C# volatile variable: Memory fences VS. caching

所以我现在研究这个主题很长一段时间了,我想我理解最重要的概念,如发布和获取内存栅栏 。 但是,我还没有找到令人满意的解释,因为volatile和主存储器的缓存之间的关系。 因此,我理解每次对volatile字段的读写操作都会强制执行读取的严格排序以及之前和之后的写入操作(读取 - 获 ...

内存屏障是CPU执行的指令,还是仅仅是一个标记? - Is a memory barrier an instruction that the CPU executes, or is it just a marker?

我试图准确理解什么是内存障碍。 根据我目前所知,内存屏障(例如: mfence )用于防止指令从存储器屏障之前到之后和之后再重新排序。 这是使用中的内存屏障的示例: 现在我的问题是: mfence指令只是一个标记,告诉CPU执行指令的顺序是什么? 或者它是CPU实际执行的指令, ...

thread::join 上是否存在具有同步关系的隐式内存屏障? - Is there an implicit memory barrier with synchronized-with relationship on thread::join?

我有一个代码在工作,它启动多个线程来执行某些操作,如果其中任何一个失败,它们会将共享变量设置为false 。 然后主线程加入所有的工作线程。 对此的模拟大致如下(我注释掉了我不知道是否需要的可能修复): 即使其中一名工作人员将其设置为false ,主线程是否有可能将成功变量读取为true ? ...

在C11中具有非原子的栅栏 - Fences with non-atomics in C11

有没有办法使用围栏来推断C11中非原子操作的行为? 具体来说,我想在某些字段需要为int以与旧接口兼容的情况下使代码安全,这些旧接口可能会读取和写入数据结构到文件或将它们作为系统调用参数传递。 因为没有要求atomic_int甚至与int大小相同,所以我不能使用atomic_int 。 ...

MS特定的volatile是否会阻止硬件指令重新排序 - Does MS-specific volatile prevent hardware instructions reordering

从文档 : 微软特定 当使用/ volatile:ms编译器选项时 - 默认情况下,当ARM以外的体系结构成为目标时 - 除了维护对其他全局对象的引用的排序之外,编译器还生成额外的代码来维护对volatile对象的引用之间的排序。特别是: 对volatile对象的 ...

原子 <bool> vs bool受互斥锁保护 - atomic<bool> vs bool protected by mutex

假设我们有一个内存区域,其中一些线程正在写入数据。 然后它将注意力转移到其他地方并允许任意其他线程读取数据。 但是,在某个时间点,它希望重用该内存区域并再次写入。 writer线程提供一个布尔标志( valid ),表示内存仍然有效以便读取(即他还没有重用它)。 在某些时候,他会将此 ...


 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM