lock-free

    10热度

    2回答

    我在Clojure任务中取得了进步(在4clojure.com上解决了大约80个问题),我一直在阅读和编码,并试图“明白”。 现在我对Clojure被设计用于“无锁并发”感到困惑。我非常清楚死锁问题(如:“我编写的代码很糟糕,最终导致死锁”,而不是“我在并发专家”)。我也看到了这一点: Why is lockless concurrency such a big deal (in Clojure)

    2热度

    3回答

    想象这样的结构: struct my_struct { uint32_t refs ... } 针对其指针通过查找表获得的: struct my_struct** table; my_struct* my_struct_lookup(const char* name) { my_struct* s = table[hash(name)]; /*

    25热度

    4回答

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

    10热度

    2回答

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

    4热度

    3回答

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

    0热度

    1回答

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

    0热度

    2回答

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

    8热度

    2回答

    我在我的代码中大量使用了<thread> <atomic> <mutex>等,其中包括几个无锁算法。我的目标(最终)是一个Linux环境。我一直在用Visual Studio 2011 Beta进行开发,虽然在其他C++ 11功能中缺少可怕的东西,但似乎是实现并发功能的唯一工具链。 见C++ 11的支持位置: Clang 3+ GCC 4.7 MSVC 11 现在,如果别人根本没有包含C++ 11

    9热度

    2回答

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

    4热度

    2回答

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