lock-free 相关问题

用于在不使用锁的情况下同步多线程环境或其他形式的分布式系统的方法和算法的总称。

顺序一致性和获取/释放语义之间有什么区别? [重复]

据我所知,获取/释放语义充当顺序一致性和较弱内存模型允许的无条件内存重新排序自由之间的中间立场(或“放松”,如......

回答 2 投票 0

Java 上有堆外无锁数据结构(列表、集合、映射等)吗?

我在内存数据存储中发现了几种off-heap,比如Chronicle-Map、mapdb等...它们都有锁的使用(stamped读写锁,或者可重入读写锁)。 有数据吗

回答 3 投票 0

Mged M. Michael提出的危险指针可以预防ABA问题吗?

更新: 就我而言,“另一个线程可能会删除然后重新插入第 4 行和第 4b 行之间的节点”意味着可以删除、修改节点并将其重新插入到

回答 1 投票 0

C++ 的并发集?

我正在寻找 C++ 中的无锁数据结构来替换以下内容: pthread_mutex_lock(plock); set.insert(元素); pthread_mutex_unlock(plock); 该集应该支持 .insert() 和 .size()

回答 2 投票 0

无锁 spsc 队列中的数据未正确排序

我正在尝试编写一个有界无锁单生产者、单消费者队列,但是插入队列的元素顺序与从 q 中删除元素的顺序不同...

回答 1 投票 0

LoadStore 屏障可以防止什么?

或者,我们什么时候需要LoadStore屏障? 根据道格·李的说法, (LoadStore) 确保在刷新与 Store2 关联的所有数据和后续存储指令之前加载 Load1 的数据 ...

回答 1 投票 0

撕裂的结构值:我应该在多线程读/写场景中始终锁定大型结构吗?

显然,一个变量可能看起来持有一个从未分配给它的值。我在 64 位操作系统上运行了以下程序,针对“AnyCPU”和 .NET Framework 4.5(编辑:虽然它...

回答 1 投票 0

在rigtorp的SPSCQueue中使用索引缓存的目的是什么

我正在阅读rigtorp的SPSCQueue的实现,这是一个非常优雅的设计并且具有非常好的基准。 我理解自述文件中描述的大部分设计哲学。我什么...

回答 2 投票 0

在原子加载之前使用获取栅栏

通常,在原子加载之后使用获取栅栏: if (flag.load(std::memory_order_relaxed)) { std::atomic_thread_fence(std::memory_order_acquire); // 在这里读取一些非原子数据。 } 嗬...

回答 1 投票 0

CLR 通过 C# 实现的“互锁任何模式”不是线程安全的吗

阅读 Jeffrey Richter 在 CLR 中通过 C# 第 4 版创造的 Interlocked Anything 模式,他给出了以下示例,证明我们可以做的不仅仅是 Add for Interlocked 酒吧...

回答 1 投票 0

C# 中两个线程之间读写 float 类型

我有两个线程,并且这些线程之间共享了一个浮点类型值。在 Thread1 上写入浮点型值并由 Thread2 读取。 Thread1 和Thread2 同时启动。 私人...

回答 1 投票 0

Golang中如何使用CAS实现无锁切片追加?

我尝试使用sync.Map + CompareAndSwap来实现无锁并发切片追加,但失败了。 我注意到记录“n”重复出现,但我不明白为什么。 去游乐场 功能主要...

回答 1 投票 0

意外的线程间发生在宽松的内存排序关系之前

我正在实践 C++ 并发,在尝试理解清单 5.12 时遇到了问题,如下所示(GitHub 代码示例)。我明白为什么以下内容应该在以下情况下起作用:

回答 1 投票 0

无锁圆形数组

我正在考虑实现一个无锁循环数组。一个问题是以无锁方式维护头指针和尾指针。我想到的代码是: int 循环增量AndGet(

回答 5 投票 0

具有多个存储的内存顺序

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

回答 1 投票 0

c++11 2 线程无锁队列

除了主线程之外,我还有一个线程接收数据并将其写入文件中。 std::queue> 数据队列; std::mutex 互斥体; void setData(const std::vecto...

回答 2 投票 0

std::atomic<int> 与与本机单词对齐的 int 变量,哪个更好?

#包括 #包括 对齐(sizeof(void*)) int n1; std::atomic n2; int main() { std::thread 线程[32]; for (自动&线程: 线程) {

回答 1 投票 0

无锁队列在 C 性能中计算素数

我尝试使用具有无锁队列的多线程来获得最佳性能来计算素数,而无需编辑朴素的素数检查函数,并且最多仅需要 1.8MB 的 RAM 空间。 关于...

回答 1 投票 0

如何在C/Linux中实现双字比较和交换?

我正在阅读论文《简单、快速、实用的非阻塞和阻塞并发队列算法》,我意识到他们假设计算机实现了以下功能

回答 2 投票 0

这段代码中使用Interlocked.Exchange写入的易失性读取值是否存在线程安全问题? [重复]

类任务跟踪器 { 私有易失性 ConcurrentBag _bag = new(); 公共异步任务 WaitAllAvailableAsync() { 等待 Task.WhenAll(Interlocked.Exchange(ref _bag, n...

回答 1 投票 0

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