我已经用多种语言进行了编程,但我不知道我的代码中存在死锁。
我认为这意味着它不会发生。
这是否经常发生(在编程中, 而不是 在数据库中)足以让我担心吗?
最佳答案
如果两个条件为真,就会出现死锁:您有多个头条,并且它们争用不止一种资源。
你会写多线程代码吗?您可以通过启动您自己的线程来明确地做到这一点,或者您可以在一个框架中工作,在该框架中线程是在您的视线之外创建的,因此您在多个线程中运行而您在代码中没有看到它。
一个例子:Java Servlet API。您编写一个 servlet 或 JSP。您部署到应用服务器。几个用户访问了您的网站,因此访问了您的 servlet。服务器可能会为每个用户设置一个线程。
现在考虑如果在服务请求时您想要获取一些资源会发生什么:
if ( user Is Important ){
getResourceA();
}
getResourceB();
if (today is Thursday ) {
getResourceA();
}
// some more code
releaseResourceA();
releaseResoruceB();
在上面人为设计的示例中,考虑在星期四当重要用户的请求到达时可能会发生什么,并且或多或少同时一个不重要的用户请求到达。
重要用户的线程得到资源A,想要B。不太重要的用户得到资源B,想要A。也不会放手已经拥有的资源……死锁。
如果您正在编写显式使用同步的代码,这实际上很容易发生。最常见的是我在使用数据库时看到它发生,幸运的是数据库通常有死锁检测,所以我们可以找出我们犯了什么错误。
防止死锁:
关于deadlock - 编程中死锁问题的发生频率如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1360805/