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

标签 c++ thread-safety

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/

相关文章:

java - 如何单独同步数据成员

java - 在 Java 中共享一个 ThreadLocal 变量

c++ - 无法访问类中声明的私有(private)成员

c++ - 为什么共享指针赋值是 'swap' ?

python - 从 Flask 请求中读取全局 collections.deque 安全吗?

java - 多线程 ThreadSeven 扩展了 Thread

c++ - 我怎么知道我上次的指示

c++ - 解决循环 C++ 模板依赖

c++ - 带有 memset_s 分配器的 std::vector

c++ - 是否有适用于 C++ 的线程安全图形库?