lock-free相关内容

什么是C++11原子库与Java的原子库等价物?

需要此调用来实现无锁的链表。 ATOMICMarkableReference是一个来自java.util.concurent.atom包的对象,它封装了对类型T的对象的引用和布尔标记。这些字段可以一起更新,也可以单独更新。 谢谢。 推荐答案 假设对象的对齐大于1,则可以将指针的最后一位用作布尔标记: template class MarkableRefer ..
发布时间:2022-04-18 09:58:04 Java开发

在 C# 中锁定空闲堆栈和队列

有谁知道是否有任何可用于 .NET 的无锁容器库? 最好是被证明有效且比我们在 .NET 中使用的同步包装器更快的东西. 我在 .NET 上找到了一些文章,但没有一篇指定任何速度基准测试,也没有激发人们对其可靠性的信心. 谢谢 解决方案 迟到了,但总比没有好,我认为我会将 Julian Bucknalls 的文章添加到此列表中. 但他没有性能数据.在我对他的结构的测 ..

c++ 是否存在多生产者单消费者无锁队列?

我读得越多,我就越困惑……我会认为找到一个用 C++ 实现的正式正确的 MPSC 队列是微不足道的. 每当我发现另一个问题时,进一步的研究似乎表明存在诸如 ABA 或其他微妙的竞争条件之类的问题. 很多人都在谈论垃圾收集的必要性.这是我想避免的. 那里有公认的正确开源实现吗? 解决方案 你可能要检查disruptor;它在 C++ 中可用:http://lmax-exch ..
发布时间:2022-01-22 20:07:01 C/C++开发

无锁算法真的比全锁算法表现更好吗?

Raymond Chen一直在做一个巨大 系列 在 无锁 算法.除了 InterlockedXxx 函数的简单案例之外,所有这些函数的流行模式似乎是它们实现自己的锁.当然,没有处理器锁,但在每个 CPU 上反复循环以确保一致性的概念非常类似于自旋锁.作为自旋锁,它们的效率将低于操作系统附带的通用锁,因为它们在等待其他线程时不会产生对它们的量子的控制.因此,每当有人来找我说“但我的算法是无锁的"时, ..
发布时间:2022-01-22 19:53:44 其他开发

寻找对我的线程安全、无锁队列实现的批评

所以,经过一番研究,我写了一个队列.它使用固定大小的缓冲区,因此它是一个循环队列.它必须是线程安全的,我试图让它无锁.我想知道它有什么问题,因为这些事情我自己很难预测. 这是标题: 模板类 LockFreeQueue{上市:LockFreeQueue(uint buffersize) : buffer(NULL), ifront1(0), ifront2(0), ibac ..
发布时间:2022-01-21 11:59:39 C/C++开发

无锁队列——单生产者,多消费者

我正在寻找一种方法来实现支持单个生产者和多个消费者的无锁队列数据结构.我看过 Maged Michael 和 Michael Scott (1996) 的经典方法,但他们的版本使用链表.我想要一个使用有界循环缓冲区的实现.使用原子变量的东西? 顺便说一句,我不确定为什么这些经典方法是为需要大量动态内存管理的链表设计的.在多线程程序中,所有的内存管理例程都是序列化的.将无锁方法与动态数据结构结 ..
发布时间:2022-01-21 11:42:25 C/C++开发

ARM LL/SC 通过寄存器宽度或缓存线宽度进行独占访问?

我正在开发下一个版本的无锁数据结构库,在 ARM 上使用 LL/SC. 对于我的 LL/SC 用例,我需要将它与 LDREX 和 STREX 之间的单个 STR 一起使用.(而不是用它来模拟 CAS.) 现在,我已经编写了代码,并且可以正常工作.然而,我担心的是它可能并不总是有效.我在 PowerPC 上读过,如果您访问与 LL/SC 目标相同的缓存行,就会破坏 LL/SC. 所 ..

是否有生产就绪的无锁队列或 C++ 中的哈希实现

我一直在谷歌上搜索 C++ 中的无锁队列.我找到了一些代码和一些试验 - 但没有任何我能够编译的.也欢迎使用无锁哈希. 总结:到目前为止,我还没有肯定的答案.没有“生产就绪"库,令人惊讶的是,现有的库都没有符合 STL 容器的 API. 解决方案 从 1.53 开始,boost 提供了一个 一组无锁数据结构,包括队列、堆栈和单生产者/单消费者队列(即环形缓冲区). ..
发布时间:2022-01-07 11:04:20 C/C++开发

使用 Boost.Lockfree 队列比使用互斥锁慢

直到现在我在我的项目中使用 std::queue.我测量了此队列上的特定操作所需的平均时间. 时间是在 2 台机器上测量的:我的本地 Ubuntu VM 和远程服务器.使用 std::queue,两台机器上的平均值几乎相同:~750 微秒. 然后我将std::queue“升级"到boost::lockfree::spsc_queue,这样我就可以摆脱保护队列的互斥锁.在我的本地 VM ..
发布时间:2021-12-24 15:43:48 C/C++开发

C#中的无锁栈和队列

有谁知道是否有任何可用于 .NET 的无锁容器库? 最好是被证明有效并且比我们在 .NET 中拥有的同步包装器更快的东西. 我在 .NET 上找到了一些文章,但它们都没有指定任何速度基准测试,也没有激发人们对其可靠性的信心. 谢谢 解决方案 迟到但总比没有好 我想我会将 Julian Bucknalls 的文章添加到此列表中. 但他没有表现数据.在我对他的结构的测试 ..

如何使用 c++11 CAS 实现 ABA 计数器?

我正在实现一个基于此算法的无锁队列,它使用一个计数器来解决 ABA 问题.但我不知道如何用 c++11 CAS 实现这个计数器.例如从算法: E9: if CAS(&tail.ptr->next, next, ) 这是一个原子操作,意思是如果tail.ptr->next等于next,让tail.ptr->nextcode> 指向 node 并同时(原子地)使 next.count+1.但是,使 ..
发布时间:2021-12-06 11:19:15 C/C++开发

如何在 VB.net 中指定 volatile 的等效项?

我正在尝试编写用于消息传递的调用队列的无锁版本.这不是为了任何严肃的事情,只是为了学习线程. 我相对确定我的代码是正确的,除非指令被重新排序或在寄存器中完成.我知道我可以使用内存屏障来停止重新排序,但如何确保值立即写入内存? 公共类CallQueue私有优先作为新节点(无)“由消费者拥有"私有最后作为节点 = 第一个“由生产者拥有"私有类节点公共只读操作作为操作公开 [next] 作为节点 ..
发布时间:2021-12-06 10:50:59 其他开发

无锁结构的 C++ 原子操作

我正在使用原子(双)比较和交换指令实现无锁机制,例如cmpxchg16b 我目前正在汇编中编写它,然后将其链接起来.但是,我想知道是否有办法让编译器自动为我执行此操作?例如用“原子"包围代码块,让它去弄清楚如何在底层处理器架构中将代码实现为原子指令(或者如果底层架构不支持,则在编译时生成错误)? 附言我知道 gcc 有一些内置函数(至少对于 CAS) http://gcc.gnu ..
发布时间:2021-11-30 14:56:08 C/C++开发