编写一个肯定会陷入僵局的程序

2019年7月30日 66点热度 0条评论

Closed. This question needs to be more
focused。它当前不接受答案。

想改善这个问题吗?更新问题,使其仅关注
editing this post的一个问题。

5年前关闭。

Improve this question

我最近在一次采访中提出了这个问题。

我回答说,如果交织出错,就会发生死锁,但是访调员坚持认为,可以编写一个无论交织而总是陷入死锁的程序。

我们可以编写这样的程序吗?您能指出我这样的示例程序吗?

解决方案如下:

更新:This question was the subject of my blog in January 2013。感谢您提出的好问题!

How can we write a program that will always go into deadlock no matter how the threads are scheduled?

这是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() 
  { }
}

上一篇:java - 最佳实践/性能:将StringBuilder.append与String.concat混合

下一篇:java - 如何创建通用数组?

相关文章:

php - apache服务器如何处理对数据库的并发请求

c# - 在C#中处理应用程序挂起/死锁

java - MessageDigest.getInstance((“SHA”)返回什么特定的哈希算法?

java - 单例使用双重检查阻止方法实例化

java - 文字未显示(初学者)

python - 带有不可拾取对象的Python多重处理

mysql - 更新和选择命令之间的MYSQL数据库死锁

mysql - 在SELECT…INNER JOIN…FOR UPDATE的情况下,字符串的顺序将锁定什么,如何避免死锁?

java - 是否可以使用eclipse和共享仅构建一次Java项目?

java - Java,数学(加,除,乘)一起

©2020 IT工具网