当前位置: 首页 > 知识库问答 >
问题:

无界免等待?

葛浩阔
2023-03-14

这是ConcurrentLinkedQueue文档的描述:

基于链接节点的无限线程安全队列。此队列对元素 FIFO(先进先出)进行排序。

此实现采用高效的“免等待”算法

是否有可能无界和无等待?
我很确定等待自由确保了任何操作的约束。

共有2个答案

施喜
2023-03-14

等待自由实际上意味着一个操作将在有限的步骤内完成

如果每个操作在操作完成之前都有一个算法将采取的步骤数的界限,那么该算法就是无等待的

定义不适用于ConcurrentLinkedQueue。轮询(或放置)队列时,每个线程都有可能失败无数次。仅这一事实就告诉我们,队列并不是真正的免费等待。我相信作者没有在《多处理机编程艺术》中使用Herlihy给出的无等待定义。

有关更多信息,CLQ使用Michael

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

轩辕瑞
2023-03-14

我很确定等待自由确保了任何操作的约束。

对操作所采取的时间(或指令的数量,或任何东西)的限制。

在JavaDoc中,“Unbounded”可能是指队列可能包含的元素数量。

例如,LinkedBlockingDeque的JavaDoc写道:

基于链接节点的可选边界阻塞双端面。

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

 类似资料:
  • 问题内容: 我遇到的问题是,有时我启动的线程在调用它之前就完成了。看来这使我的程序等待不再发生的事情()。如何确保不等待线程完成? 问题答案: 如果您阅读JavaDocs for Thread,它将告诉您 永远不要在Thread对象上使用。您应该使用join()

  • 问题内容: 是否存在无限制版本(或对于Python 2),还是有必要手动定义它?例如 只能给我一个生成方的生成器,而我看不到任何明显的调用方式,以使它一直保持不变。 问题答案: 您正在描述的基本用法:

  • 我想知道是否有一种方法可以避免在Netty中关闭连接时设置TCP RST标志,而不是TCP FIN标志,其中TCP接收缓冲区中还残留着输入数据。 使用案例是: 客户端(用C编写)发送包含许多字段的数据包 服务器读取数据包,在早期字段遇到错误,引发异常 异常处理程序捕获异常,写入错误消息,并将写入时关闭回调添加到写入将来 问题是: 接收缓冲区中的剩余数据会导致Linux(或Java..)用RST标志

  • 问题内容: 更新记录时,我反复出现锁定超时超出异常的情况。 我正在使用Java Struts 2.1 Hibernate配置。使用的数据库是MYSQL。 任何人都知道如何解决它。 问题答案: 这里有一些建议: “ 锁定等待超时 ”通常发生在事务正在等待要更新的数据行上,而该行已被某些其他事务锁定时。 在大多数情况下,问题出在数据库方面。可能的原因可能是表格设计不当,数据量大,约束等。 请查看这个详

  • 问题内容: 两种方法中的哪一种符合W3C标准?它们在浏览器中的表现均符合预期吗? 边界:无; 边界:0; 问题答案: 两者均有效。 这是你的选择。 我喜欢,因为它更短。我觉得这更容易阅读。您可能会发现更清晰。我们生活在功能强大的CSS后处理器世界中,因此我建议您使用您喜欢的任何东西,然后通过“压缩机”运行它。这里没有值得战斗的圣战。 综上所述,如果您要手写所有的生产CSS,尽管评论中有些抱怨,但我

  • 我实际上有三个问题: Selenium WebDriver如何实现此 因为我们不能给无限睡眠的线程一个负值。 有没有更好的方法来实现无限等待? 我们在SeleniumWebDriver文档中看到了这一点