lock-free

    4热度

    3回答

    我的问题涉及到多线程无锁同步。我想知道以下内容: 什么是实现此目的的一般方法?我读了一些关于LockFreePrimitives的地方,比如CompareAndExchange(CAS)或DoubleCompareAndExchange(DCA),但没有给出这些解释吗?任何最小化使用锁的方法? Java/.NET如何实现其并发容器?他们使用锁还是无锁同步? 在此先感谢。

    0热度

    1回答

    是否有人知道支持排序操作(即找到第k个元素)的任何无锁定跳过列表实现和/或研究论文?或者,是否有人知道这种手术无法奏效的根本原因? 加分点: 不承担垃圾收集的执行力度。我的经验已经有不少研究论文忽略了内存管理。 支持: 有关如何军衔操作可以在常规skiplist进行了描述:“一个跳跃列表食谱”由威廉·皮尤 为了更好的无锁skiplist之一描述:“实用锁定自由”的凯尔·弗雷泽 一个更好的无锁ski

    0热度

    2回答

    存在大量关于无锁双向链接列表的研究。同样,在无锁跳过列表上也有大量的研究报告。然而,尽我所知,没有人管理一个无锁的双重链接跳过列表。有没有人知道任何相反的研究,或者为什么会出现这种情况? 编辑: 具体的场景是建立一个快速分位数(50%,75%等)累加器。将样本插入到O(log n)时间的跳过列表中。通过维护当前分位数的迭代器,我们可以将插入值与O(1)时间内的当前分位数进行比较,并可以轻松确定插入

    4热度

    1回答

    我试图使用boost锁定库。但是,当我将模板参数设置为用户定义类型时,出现错误invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’。 有什么可以解决的吗? typedef struct TMsgBuffer { char m_puBuffer[51

    9热度

    2回答

    谷歌对“锁定免费矢量”的第一个结果是由Damian Dechev,Peter Pirkelbauer和Bjarne Stroustrup描述理论无锁矢量的研究论文。这个或者其他无锁矢量是否已经实现?

    4热度

    2回答

    短版: 我试图取代的std ::从一个无锁,单曲制作,从here单个消费者队列实现使用C++ 11的原子。我该如何替换boost::atomic? 龙版本: 我试图得到一个更好的表现出我们的应用程序与工作线程。每个线程都有自己的任务队列。我们必须在出列/排队每个任务之前使用锁进行同步。 然后我找到了Herb Sutter关于无锁队列的文章。这似乎是一个理想的替代品。但代码使用C++ 11中的std

    0热度

    1回答

    似乎fetch_add是win(请参阅后的评论以及)支持这两个CPU的CAS循环。 切换清除位以设置位时,可以使用按位或加法操作。结果将是相同的。我预计每个人的表现都是平等的。因此,决定使用哪种操作将取决于操作的硬件支持差异(如果有的话,我没有提供任何有关处理器支持的信息)。 是否有任何理由相对于其他在这种情况下?

    4热度

    2回答

    我有一双无符号INT32的 std::atomic<u32> _start; std::atomic<u32> _end; 有时候我想设置启动或比较交换端,所以我不希望可以通过对整个64位对使用CAS造成的虚假故障。我只想使用32位CAS。 _end.compare_exchange_strong(old_end, new_end); 现在我可以同时获取一个原子64位读取的开始和结束。或

    25热度

    4回答

    我读得越多,我就变得越困惑...我会认为找到一个在C++中实现的正式正确的mpsc队列是微不足道的。 每当我找到另一个刺它,进一步研究似乎表明有如ABA或其他微妙的竞争条件的问题。 很多人都在谈论垃圾收集的必要性。这是我想避免的。 有没有一个公认的正确的开放源代码实现了吗?

    10热度

    2回答

    我需要以原子方式读取/写入16个字节。我只使用cmpxchg16编写,除了我认为的一个难以理解的AMD处理器之外,它在所有x64处理器上都可用。 现在的问题是对齐的16字节值,只有使用cmpxchg16(它充当内存屏障)才能修改,是否有可能读取16位字节的位置,这是半旧的数据和一半的新数据? 只要我用SSE指令读取(所以线程在读取过程中不能被中断),我认为读取时看不到不一致的数据是不可能的(即使在