C++ 中有线程安全、非阻塞的队列类吗?
可能是一个基本的问题,但我已经很久没有做 C++了...
编辑:删除了 STL 要求。
最佳答案
假设您的 CPU 具有双指针范围的比较和交换(486 或更高版本上的 compxchg8b,大多数 amd64 机器上的 compxchg16b [英特尔的一些早期型号上不存在])...有一个算法 here 。
更新:如果您不怕做一些工作,将其转换为 C++ 并不难。 :P
这个算法假设一个“带标签的指针”结构,如下所示:
// Be aware that copying this structure has to be done atomically...
template <class T>
struct pointer
{
T *ptr;
uintptr_t tag;
};
然后你想用一些内联汇编包装指令 lock cmpxchg{8|16}b
...
也许你可以这样写队列节点:
template <class T>
struct queue_node
{
T value;
pointer<queue_node<T> > next;
};
其余的或多或少是我链接到的算法的转录......
关于c++ - C++中的非阻塞线程安全队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1645326/