当前位置: 首页 > 面试题库 >

无等待和无锁算法的示例/说明

柳杰
2023-03-14
问题内容

我已经读到,免等待会导致所有线程独立完成,而免锁会确保程序整体完成。我不太明白。任何人都可以提供一个示例(java)来说明这一点。

编辑:无锁是否意味着没有死锁的程序?


问题答案:

如果一个程序是无锁的,则基本上意味着它 的至少一个 线程可以保证在任意时间段内取得进展。如果程序死锁,则它的所有线程(因此也就整个程序)都无法取得进展-
我们可以说它不是无锁的。由于保证了无锁程序的进展,因此保证了它们的完成(假定有限执行而没有例外)。

无等待是一个更强的条件,这意味着无论线程执行的时间/顺序如何,都保证 每个
线程都可以在任意时间段内取得进展。因此我们可以说线程独立完成。所有无需等待的程序都是无锁的。

我不知道有任何Java例子可以说明这一点,但是我可以告诉您,无锁/无等待程序通常是使用CAS指令之类的低级原语实现的,没有锁。



 类似资料:
  • 我遇到了一些使用c#的/关键字进行异步编程的最佳实践(我是c# 5.0的新手)。 给出的建议之一如下: 稳定性:了解您的同步上下文 ...一些同步上下文是不可重入的和单线程的。这意味着在给定时间只能在上下文中执行一个工作单元。这方面的一个例子是Windows UI线程或ASP.NET请求上下文。在这些单线程同步上下文中,很容易死锁。如果您从单线程上下文中生成一个任务,然后在上下文中等待该任务,您的

  • 本文向大家介绍Redis实现分布式锁和等待序列的方法示例,包括了Redis实现分布式锁和等待序列的方法示例的使用技巧和注意事项,需要的朋友参考一下 在集群下,经常会因为同时处理发生资源争抢和并发问题,但是我们都知道同步锁 synchronized 、 cas 、 ReentrankLock 这些锁的作用范围都是 JVM ,说白了在集群下没啥用。这时我们就需要能在多台 JVM 之间决定执行顺序的锁了

  • 这是我的剧本。 “等待线程”行有错误。睡眠(3000);它说“无法等待”无效“请有人为我重新编写脚本,这样它就可以工作了吗?

  • 这是ConcurrentLinkedQueue文档的描述: 基于链接节点的无限线程安全队列。此队列对元素 FIFO(先进先出)进行排序。 。 此实现采用高效的“免等待”算法 是否有可能无界和无等待? 我很确定等待自由确保了任何操作的约束。

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

  • 上面的代码工作得很好,但如果我使用wait而不是thread。sleep I get StaleElementReferenceException异常。这是我使用的流畅等待: 这将找到combobox,但再次对combobox执行任何操作将导致NoTouchElement或statestate异常。所以我也尝试了从combobox中选择值: 这超时和doesnot工作! 我如何才能使这项工作,为什