【问题标题】:Why is this implementation of a queue with two stacks immutable and thread safe?为什么这个具有两个堆栈的队列实现是不可变的和线程安全的?
【发布时间】:2012-01-11 13:10:49
【问题描述】:

我见过这种实现具有两个堆栈的队列的方式:https://stackoverflow.com/a/2050402/494094

我已经读到这样队列是不可变的和线程安全的。将它与普通队列分开并使其不可变和线程安全的重点是什么?

如果有人能以简单、非专业的方式解释,我将不胜感激。

【问题讨论】:

标签: thread-safety stack queue immutability


【解决方案1】:

How to implement a queue using two stacks?解释更多,有一些代码。

如果您以低级方式执行此操作,您将拥有两个内存区域和两个指针 一个指针在你写的时候递增,另一个在你读的时候递增

一旦读取区域用完,您将写入区域反转并交换两者。

因此,阅读不会干扰写作,反之亦然。这两个操作之间的唯一联系是在“反向和交换”操作期间,然后每个人都必须等待。

【讨论】:

  • singly-linked list backed queue (like this one stackoverflow.com/a/69206/1294552) 可以实现与 CAS 和 volatile 的不变性和并发性。为什么我们需要用 2-stack 方法调用复制成本?你能更详细地解释一下。谢谢。
  • 使用 2 队列实现堆栈的相同问题。
猜你喜欢
  • 2016-03-10
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 2015-07-24
  • 2010-10-15
  • 2018-06-14
  • 1970-01-01
  • 2010-12-10
相关资源
最近更新 更多