编写一个肯定会陷入死锁的程序[关闭]

2023-12-03

我最近在采访中被问到这个问题。

我回答说如果交错出错就会出现死锁,但是面试官坚持说可以写一个不管交错总是陷入死锁的程序。

我们可以写这样的程序吗?你能给我指一些类似的示例程序吗?


UPDATE: 这个问题是我 2013 年 1 月博客的主题。感谢您提出的好问题!


我们怎样才能编写一个无论线程如何调度总是陷入死锁的程序呢?

这是 C# 中的示例。注意该程序似乎不包含锁,也没有共享数据。它只有一个局部变量和三个语句,但它却 100% 肯定会发生死锁。人们很难想出一种更简单且肯定会陷入僵局的程序。

给读者的练习#1:解释一下这个死锁是如何产生的。 (答案在评论中。)

给读者的练习 #2:在 Java 中演示相同的死锁。 (答案在这里:https://stackoverflow.com/a/9286697/88656)

class MyClass
{
  static MyClass() 
  {
    // Let's run the initialization on another thread!
    var thread = new System.Threading.Thread(Initialize);
    thread.Start();
    thread.Join();
  }

  static void Initialize() 
  { /* TODO: Add initialization code */ }

  static void Main() 
  { }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写一个肯定会陷入死锁的程序[关闭] 的相关文章

  • 为什么 Java 中需要 String[] args?

    我知道 String args 是作为参数传递到 main 的字符串数组 java Print Hello World class Print public static void main String args System out p
  • Logback线程池

    我使用 Logback 进行日志记录 我有一个问题 我将 AsyncAppender 与 ConsoleAppender 结合使用 当应用程序启动时 它会创建具有 logback 线程名称的线程池 所有日志记录工作均由 AsyncAppen
  • CustomTaskChange 在调用 updateSQL 时实际执行

    我有一个CustomTaskChange在 Liquibase 中 除了其他变更集 我希望我的应用程序在实际执行之前显示所有 ChangeSet 的 SQL 以我的理解 updateSQL应该预览 SQL 并且不执行任何操作 ACustom
  • Appengine - 隐藏文件夹的部署

    为了验证 SSL 证书 我需要将包含一些文件的隐藏文件夹 well known 上传到我的应用程序 我正在使用 eclipse 部署 java 应用程序 但 appengine 上的应用程序未收到这些文件 我猜他们被过滤掉了 我尝试将隐藏文
  • 是否有适用于 Java 的 Harel Statechart DSL 工具?

    我正在寻找一种能够理解 DSL 的工具 在其中我可以定义生成 Java 代码的状态图 或者 DSL 中的状态图可以按原样运行 该工具最好用 Java 编写 并且必须根据 Harel 状态图 或等效的 UML 2 状态机 的定义支持超级状态和
  • 要导入什么才能使用@SuppressFBWarnings?

    要使用 SuppressFBWarnings 需要导入什么 我通过帮助 安装新软件安装了 findbugs 插件 当我输入 import edu 时 我无法按 ctrl space 来获取选项 Example try String t nu
  • 为什么在java中加载JNI是在静态初始化程序中完成的?

    在许多使用 JNI 的示例中 我看到类似以下内容 class SampleClass static System loadLibrary somelib 这种特殊语法的目的是什么 为什么使用这个 而不仅仅是在类构造函数或类似的东西中 我想你
  • java - IBM-IEEE 双精度浮点字节转换

    我需要在 Java 中对字节数组进行 IBM IEEE 浮点转换 我能够使用成功地进行单精度浮点字节的转换http www thecodingforums com threads c code for converting ibm 370
  • Java 线程 JavaDoc

    我编写了一个只能在特定线程上调用的方法 是否应该将标准注释或注释添加到方法的 javadoc 中来表示这一点 不知道有任何这样的标准注释 Java 并发实践 http www javaconcurrencyinpractice com 在第
  • 使用 Spring 的 SimpleNamingContextBuilder 的应用程序如何知道在其目录中搜索资源?

    使用 Spring 的应用程序如何SimpleNamingContextBuilder http static springsource org spring docs 3 0 x api org springframework mock
  • Eclipse:对 Java 1.7 的失望(未绑定库)

    我在全新安装的 Eclipse 中处理全新项目时遇到问题 重现步骤 下载此版本的 Eclipse http www eclipse org downloads packages eclipse ide java developers hel
  • 将项目导入 Eclipse 后出现“必须重写超类方法”错误

    任何时候我必须将我的项目重新导入到 Eclipse 中 如果我重新安装了 Eclipse 或者更改了项目的位置 几乎全部我的重写方法的格式不正确 导致错误 该方法必须重写超类方法 值得注意的是 无论出于何种原因 Android 项目中方法参
  • 用于计算句子中单词数的正则表达式

    public static int getWordCount String sentence return sentence split a zA Z0 9 a zA Z0 9 1 length sentence replaceAll a
  • 如何使用二叉树中的递归来完成回溯

    我正在尝试插入一个二进制节点 我的代码很复杂 没有希望挽救它 所以我计划重写它 基本上我没有考虑回溯 也没有仔细考虑算法 我正在尝试使用顺序遍历插入二进制节点 但我不明白应该如何回溯 D B E A C F 我如何搜索根 D 的左子树 然后
  • JNA Windows 服务启动类型

    我一直在使用 JNA 并且能够使用下面的代码返回 Windows 服务的状态 即启动或停止 但我不确定如何返回服务的启动类型 我确信 JNA 之外还有其他方法 但如果可能的话我想继续使用 JNA import com sun jna imp
  • 通过命令行参数更改默认的 ant 目标

    最近我被分配了一个任务 让ant能够为不同的环境构建war包 除了一项功能外 我几乎完成了 蚂蚁接受一个env参数类似 Denv DEV 并使用不同的配置文件来制作war包 但默认目标是start它将构建 部署并启动 tomcat 我不希望
  • 术语“可序列化”是什么意思? [复制]

    这个问题在这里已经有答案了 不太确定我读过的定义可序列化实际上做了什么 import java io Serializable import java text StringCharacterIterator import java uti
  • C中使用JNI从对象获取对象

    public class Student private People people private Result result private int amount 这是 Java 中类的示例 在C中 我试图获取 学生 中的 人 但失败了
  • 删除子类中的注释?

    我有一个子类 需要一个注释 在删除的父类中声明 做这个的最好方式是什么 public class Parent MyAnnoation String foobar public class Child extends Parent here
  • 如何将 Hibernate 5 安装到 Apache Karaf v4 中

    我已经安装了 Apache Karaf v4 03 并查询了 Hibernate 的可用功能列表 如下所示 不幸的是 我使用的是 Hibernate v5 hibernate 3 3 2 GA Uninstalled enterprise

随机推荐

  • 如何关闭嵌入的modalDialog

    我将 modalDialog 嵌入到其他中modalDialog 当我跑步时modalButton他们都关门了 如何仅关闭嵌入的modalDialog Now Code library shiny shinyApp ui lt fluidP
  • 如何使用主页快速操作打开特定视图

    我是 Swift 新手 一直在使用 SwiftUI 而不是 Storyboard 我在 Info plist 中设置了 UIApplicationShortcutItems 并有两个快速操作可以使用 launchOptions 来显示警报
  • JSON 请求出现无效标签错误

    我读过很多关于这个的文章 但我就是不明白 它与我的代码无关 它与 feed 或其他东西有关 因为如果我将它与 Twitter feed 交换 它会返回一个完美的 Object 对象 getJSON http rockbottom nozzl
  • 偶尔“访问被拒绝”到“C:\WINDOWS\TEMP\”文件

    在我的 ASP NET MVC 应用程序中 当我尝试从 Microsoft Reporting Services 程序集打开或生成 LocalReport 时 有时会出现以下错误 Microsoft Reporting WebForms L
  • 如何使用 TraMineR 和聚合序列数据进行差异分析?

    由于我有一个大数据集和有限的计算资源 我想利用聚合序列对象来差异分析使用 R 包TraMineR and WeightedCluster 但我很难找到合适的syntax因为这样做 在下面的示例代码中 您会发现两个差异分析 差异分析的第一个树
  • 如果路径包含空格,则无法从 VBScript 启动 bat 文件

    例如 我一直在尝试从路径启动 myFileToRun bat 文件 D My Folder batchfiles myFileToRun bat 下面是我尝试运行它的 VBScript Dim WshShell strCurrentDire
  • 如何获取我的设备中安装了多少个应用程序及其名称或上次访问的信息?

    我需要在我的应用程序中显示上次访问的应用程序信息 我怎样才能得到这些信息 您可以使用此代码来获取应用程序列表 PackageManager pm this getPackageManager Intent intent new Intent
  • postDelayed是否会导致消息跳到队列的前面?

    我在 Android 文档中查找 postDelayed发布延迟的文档 这与另一个问题类似 https stackoverflow com questions 25820528 is postdelayed relative to when
  • 执行用包含脚本标签的 XMLHttpRequest 编写的 Javascript?

    通过 JavaScript 请求 XMLHttpRequest使用一些额外的 Javascript 进行响应 这些额外的 Javascript 需要添加到请求页面的页面中 使用 eval 如果响应类似于 alert This is the
  • 如何在 Swift 3 中同时发出 https 请求

    我在执行 https 请求时遇到问题 如果请求没有任何错误 我永远不会收到消息 这是一个命令行工具应用程序 我有一个允许 http 请求的 plist 我总是看到完成块 typealias escHandler URLResponse Da
  • 使用 Apache Camel 重复从只读文件系统轮询文件(幂等 = false)?

    我正在使用轮询消费者模式来读取给定只读目录中的所有文件并处理它们 是否可以选择忽略幂等性 我知道用 noop true 和 idempot false 定义的路由会使整个系统崩溃 无限循环 但池消费者模式是在给定时刻触发的一次性操作 Cam
  • 如何引用vue、js pug模板中的数据?

    基本上我试图从事件名称创建永久链接 当我使用 v model 从事件名称中获取值时 它可以工作 但是如何将转换后的永久链接放回到 pug 的另一个输入框中 这有效 P message textarea rows 2 message 但是当我
  • spring/hibernate:每次打开/关闭会话 VS getCurrentSession

    这些方法之间有什么区别 哪一种更好 到目前为止 我的代码片段如下 public void delete Song song session sessionFactory getCurrentSession session delete so
  • Oracle 11g 的 NHibernate TransactionScope 问题

    以下代码片段在 SQL Server 2008 SP1 中工作正常 但在 Oracle 11g 中 对 session BeginTransaction 的调用会引发异常 并显示消息 连接已经是本地或分布式事务的一部分 堆栈跟踪如下所示 使
  • Amazon Route 53 + Heroku 应用程序无法从某些地方访问 - 该怎么办?

    我正在 Heroku 上工作 在网络方面没有太多背景 我正在开发的应用程序似乎无法从某些地方访问 我们收到了人们无法访问它的报告 我们使用的 ping 服务 Statuscake 报告该站点始终无法从某些节点位置访问 为了解决这个问题 我们
  • Netbeans 15 和 payara 6.2022

    我在 JDK 17 上运行 Netbeans 15 我想尝试 Jakarta EE 10 因此我决定将我的应用程序服务器升级到 Payara 6 2022 1 Alpha 4 应用程序服务器工作正常 我可以在更新大量库后将我的应用程序部署到
  • PHP rtrim“.php”

    我想从字符串末尾删除 php 如果存在 考虑一下 filename index rtrim filename php returns index filename search rtrim filename php returns sear
  • .Net Maui - 如何返回根页面

    我觉得我只是没有向谷歌霸主问这个问题 所以我想看看是否有人可以帮助解释如何做到这一点 我有一个新的 Net Maui 应用程序 它使用 4 个不同的视图 页面 我创建的 MainPage 根 允许我从我们的数据库中搜索用户 然后将您转换到新
  • 在 Swift 4 中用一根手指进行旋转

    我创建了一个 UIGestureRecognizer 来仅用一根手指旋转视图 视图在开始时旋转 但一旦达到一定程度 就会向另一个方向旋转 你能帮我修改我的代码吗 UI视图控制器 override func viewDidLoad super
  • 编写一个肯定会陷入死锁的程序[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我最近在采访中被问到这个问题 我回答说如果交错出错就会出现死锁 但是面试官坚持说可以写一个不管交错总是陷入死锁的程序 我们可以写这样的程序吗 你能给我指一些类似的示例程序吗 UP