无限制,无需等待?

时间:2012-04-12 20:50:10

标签: java concurrency nonblocking

这是ConcurrentLinkedQueue的文档说明:

  

基于链接节点的无界线程安全队列。此队列命令元素FIFO(先进先出)   ...
  该实现采用有效的“无等待”算法

是否可以无界 等待
我很确定等待自由可以确保绑定任何操作。

2 个答案:

答案 0 :(得分:8)

  

我非常确定等待自由可以确保任何操作的约束。

操作所采取的时间(或指令数量等)的界限。

在那个JavaDoc中," Unbounded"可能是指队列可能包含的元素数量

例如,LinkedBlockingDeque writes的JavaDoc:

  

基于链接节点的可选绑定阻塞双端队列。

     

可选的容量绑定构造函数参数用作防止过度扩展的方法。如果未指定,则容量等于Integer.MAX_VALUE。每次插入时都会动态创建链接节点,除非这会使deque超出容量。

答案 1 :(得分:2)

等待自由实际上只是意味着在一些有限数量的步骤中,操作将以explained

完成
  

如果每个操作都有一个数字绑定,则算法是等待的   在操作完成之前算法将采取的步骤

此定义不适用于ConcurrentLinkedQueue。轮询(或放置)队列时,每个线程都有可能无限次失败。仅此事实告诉我们队列并非真正等待自由。我相信作者没有在“多处理器编程的艺术”中使用Herlihy的等待定义。

有关更多信息,CLQ使用Michael& Scott alogrithm解释here

编辑:刚刚意识到我为M和S队列提供的链接也在API中。两者都应该没问题。