C++中是否存在线程安全的非阻塞队列类?
可能是一个基本问题,但我很长一段时间没有做过C++ ......
编辑:删除STL要求.
假设你的CPU有双指针宽比较并交换(compxchg8b在486或更高,compxchg16b上最AMD64上[不存在于一些早期型号的英特尔])...有一种算法在这里.
更新:如果您不害怕做一些工作,那么将其转换为C++并不难.:P
该算法假设一个"带标记的指针"结构,如下所示:
// Be aware that copying this structure has to be done atomically... templatestruct pointer { T *ptr; uintptr_t tag; };
然后你想lock cmpxchg{8|16}b
用一些内联asm 包装说明...
也许那时你可以像这样编写队列节点:
templatestruct queue_node { T value; pointer > next; };
其余的或多或少是我链接到的算法的转录...
由于当前的C++标准甚至不承认线程的存在,因此在STL或标准库的任何其他部分中肯定没有线程安全的.
这似乎是Dobb博士去年的热门话题:
无锁队列
编写无锁代码:更正的队列