gpt4 book ai didi

c++ - 通过注入(inject)进行死锁检测

转载 作者:搜寻专家 更新时间:2023-10-31 00:47:57 24 4
gpt4 key购买 nike

如何通过包含用于锁定和解锁的 Hook 函数的注入(inject) DLL 来设置用于死锁检测的算法。

实际上我想要用于死锁检测的设备和算法。如果有人能告诉我这方面的情况,请多多指教。

最佳答案

概念上的死锁检测在原理上很简单,但很难实现。

从高层的角度来看,你想要的是记录每个线程持有的锁,看看获取锁是否会导致死锁。您可以使用依赖关系图将其可视化,循环表示死锁。

但是,还有其他操作可用于同步:例如自旋锁定。这些会搞砸任何检测尝试,因此请注意这些限制。

所以让我们先来模拟一下:假设有 3 个线程(T1、T2、T3)和 3 个互斥体(M1、M2、M3)

  • T1 抓取 M1
  • T2抢M2,等待M1
  • T3捕获M3,等待M2

如果 T1 等待 M3 你就完蛋了(你有一个循环),因此在尝试抓取之前,你需要检查这个条件。

您可以使用以下方式对其进行建模:

  • 一个表,其中列出了持有给定互斥量的线程
  • 一个图,表示线程之间的依赖关系

如果我们对 T1 试图捕获 M3 的情况进行建模,我们有:

Table
M1 -> T1,
M2 -> T2,
M3 -> T3,

Graph
{T1, T2, T3} x {T2 -> T1, T3 -> T2}

T1 试图捕获 M3 时:

  • 它查找表并列出持有它的线程,此处为 T3
  • 它检查在图中添加边 T1 -> T3 是否形成一个循环。

关于c++ - 通过注入(inject)进行死锁检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3201786/

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