lock-free

    2热度

    1回答

    AFAIK莱斯利兰波特已经指出: ...好像所有的处理器的操作。在一些连续的顺序被执行的任何执行的结果是相同的,并且每个单独的处理器的操作的出现按照其程序指定的的顺序排列。 来自:Leslie Lamport,“如何使正确执行多进程程序的多处理器计算机”,IEEE Trans。 COMPUT。 C-28,9(1979年9月),690-691。 所以,我不知道这是否乱序调度后意味着高级语言程序,如C

    2热度

    3回答

    当使用calloc时,指向新分配的内存的指针至少与最低有效位的certian数对齐,意味着最不重要的位(作为标记的指针)可用于锁定 - 免费算法,实际上通常用于这些算法的情况。我正在测试linux ubuntu服务器(x86_64 GNU/Linux,3.10.23-xxxx-std-ipv6-64-vps)上的内存管理功能,并且从我的实验看来,4个最低有效位设置为0。我读过的内容指出,指针对齐是

    6热度

    2回答

    我在阅读安东尼威廉姆斯的C++ Concurrency in Action,并且不了解其执行lock_free_stack类的push类。 为什么地球上原子load不在while循环中?他给出的理由是: 因此,您不必每次都通过循环, 重新加载头,因为编译器会为您做到这一点。 但我不明白。有人可以对此有所了解吗? template<typename T> class lock_free_stack

    3热度

    1回答

    我有一个基于循环缓冲区的无锁多生成器,单消费者队列。到目前为止,它只有非阻塞push_back()和pop_front()调用。现在我想添加这些调用的阻止版本,但是我想尽量减少这对使用非阻塞版本的代码的性能造成的影响 - 即它不应将它们变成“锁定默认”调用。 E.g.阻塞的push_back()的最简单的版本是这样的: void push_back_Blocking(const T& pkg) {

    -2热度

    1回答

    中实现的正向无锁列表我需要无锁数据结构来确认某些标准:快速,低内存消耗,易于实现,有序。一直在寻找,并找到数据结构,如单链表,双链表,跳过列表,但没有一个符合我所有的标准。在我看来,转发名单将满足这些标准。但我不知道任何现有的实现。 在C for Linux中是否有任何生产就绪的转发锁定列表实现?

    9热度

    1回答

    考虑下面的代码: struct payload { std::atomic<int> value; }; std::atomic< payload* > pointer(nullptr); void thread_a() { payload* p = new payload(); p->value.store(10, std::memory_order_

    0热度

    3回答

    编辑: 我现在已经完成了我的队列(以下克服所描述的问题,等等)。对于那些感兴趣的人可以找到here。我很乐意听到任何评论:)。请注意,队列不仅仅是一个工作项目队列,而是一个模板容器,当然可以通过工作项目来实例化。 原文: 在C++ 11和14上并发看Herb Sutter's talk后,我得到了所有兴奋非阻塞并发。 但是,我还没有找到解决方案,我认为是一个基本问题。所以,如果这已经在这里,请与我

    -2热度

    2回答

    CAS是非常原始的无锁技术,我知道它是原子的。 而且,它比INC更复杂的操作。 应该比较值,如果值没有改变,CAS设置新的价值,同时保证其他线程不会访问它。 那么,CAS如何可以是原子,而INC不是。 我还了解到,LOCK INC是原子操作,但比昂贵INC成本。 如果CAS也使用像LOCK INC一些类似的技术在内部,那么为什么叫无锁技术? CAS中使用的锁是否与我们通常所知的正常锁不同? 如果是

    1热度

    1回答

    对于无锁包,以下C++ 11编码算法中NQFENCE和DQFENCE内存屏障的最佳设置是什么? 描述:这个算法是一个(否则)接近最佳的多生产者多消费者无锁队列,用于提供带有非空指针的线程池。它的正确性显而易见(模块错误!)。这是不可线性化的,也就是说,由单个线程排队的数据可能无序排列,因此它不适合单个消费者队列(或消费者不是独立的环境)。 (至少对我来说!)似乎几乎是最佳的(一般)(无论如何)。它

    1热度

    1回答

    我正在寻找在C++中无锁数据结构来替换以下: pthread_mutex_lock(plock); set.insert(element); pthread_mutex_unlock(plock); 此组应该最多O(logN)的复杂性支持.insert()和.size()用,有一个迭代器,并应该能够通过自定义比较器保持其顺序。基本上和Java中的ConcurrentSkipListSet一