【问题标题】:Deadlock for a system with N threads具有 N 个线程的系统的死锁
【发布时间】:2014-12-19 21:28:11
【问题描述】:

假设我有一个有 N 个进程的系统。每个进程需要最大 K 个资源 (K

【问题讨论】:

    标签: multithreading thread-safety deadlock locks


    【解决方案1】:

    最大 N 为 1。如果有 2 个或更多线程在同一个进程中使用相同的内存进行交互,则完全可能发生死锁。场景:

    A asks for and receives lock 1
    B asks for and receives lock 2
    A asks for lock 2 and pauses
    B asks for lock 1 and pauses
    A and B now deadlock
    

    > 1 个锁的加锁顺序必须一致,以完全防止死锁。

    【讨论】:

      【解决方案2】:

      '为了防止冲突,进程需要在访问每个资源之前锁定它' - 这是误导/不正确的。它需要在一个“锁定”操作中锁定它需要的每一个资源,或者在整个集合变得可用之前保持阻塞状态。线程很有可能将资源需求集提交到资源管理结构/实例并保持阻塞状态,直到集合中的所有资源都可用,而不会阻止在等待时访问它们中的任何一个。

      对每个资源应用锁定并让线程尝试串行锁定资源是一种幼稚的解决方案,对于任何 N>1 都可能失败,正如 Haney 所解释的那样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        相关资源
        最近更新 更多