gpt4 book ai didi

deadlock - 编程中死锁问题的发生频率如何?

转载 作者:行者123 更新时间:2023-12-03 18:08:04 27 4
gpt4 key购买 nike

我已经用多种语言进行了编程,但我不知道我的代码中存在死锁。

我认为这意味着它不会发生。

这是否经常发生(在编程中, 而不是 在数据库中)足以让我担心吗?

最佳答案

如果两个条件为真,就会出现死锁:您有多个头条,并且它们争用不止一种资源。

你会写多线程代码吗?您可以通过启动您自己的线程来明确地做到这一点,或者您可以在一个框架中工作,在该框架中线程是在您的视线之外创建的,因此您在多个线程中运行而您在代码中没有看到它。

一个例子: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。也不会放手已经拥有的资源……死锁。

如果您正在编写显式使用同步的代码,这实际上很容易发生。最常见的是我在使用数据库时看到它发生,幸运的是数据库通常有死锁检测,所以我们可以找出我们犯了什么错误。

防止死锁:
  • 以明确定义的顺序获取资源。在上面的例子中,如果资源 A 总是在资源 B 之前获得,则不会发生死锁。
  • 如果可能,请使用超时,这样您就不会无限期地等待资源。这将允许您检测争用并应用防御 1。
  • 关于deadlock - 编程中死锁问题的发生频率如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1360805/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com