当前位置:  开发笔记 > 编程语言 > 正文

C++中的非阻塞线程安全队列?

如何解决《C++中的非阻塞线程安全队列?》经验,为你挑选了3个好方法。

C++中是否存在线程安全的非阻塞队列类?

可能是一个基本问题,但我很长一段时间没有做过C++ ......

编辑:删除STL要求.



1> asveikau..:

假设你的CPU有双指针宽比较并交换(compxchg8b在486或更高,compxchg16b上最AMD64上[不存在于一些早期型号的英特尔])...有一种算法在这里.

更新:如果您不害怕做一些工作,那么将其转换为C++并不难.:P

该算法假设一个"带标记的指针"结构,如下所示:

// Be aware that copying this structure has to be done atomically...

template 
struct pointer
{
   T *ptr;
   uintptr_t tag;
};

然后你想lock cmpxchg{8|16}b用一些内联asm 包装说明...

也许那时你可以像这样编写队列节点:

template 
struct queue_node
{
    T value;
    pointer > next;
};

其余的或多或少是我链接到的算法的转录...


@jldupont:-1对此太过骚扰了.Asveikau为您提供了与算法的良好链接,只需几分钟即可将其转换为C++.-1完全不需要在这里
如果你实际上没有进行投票,为什么说-1?这简直令人困惑.:p

2> sbi..:

由于当前的C++标准甚至不承认线程的存在,因此在STL或标准库的任何其他部分中肯定没有线程安全的.



3> Clifford..:

这似乎是Dobb博士去年的热门话题:

无锁队列

编写无锁代码:更正的队列

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有