对sync.RWMutex和sync.Mutex的加锁,解锁方法进行封装,记录每个协程的加锁路径图,并添加到全局加锁路径图中,通过遍历这个图寻找是否存在环路来判定是否存在死锁。
只要代码中的所有加锁路径全部覆盖到,不需要程序实际发生死锁即可检测到死锁。
type (
DeadlockInfo struct {
stack string
lockPath []string
}
OnDeadlockFunc func(deadlockType int, infos []DeadlockInfo)
Options struct {
CheckDeadLock bool
OnDeadlock OnDeadlockFunc
}
)调用SetOptions(o Options),默认检测到死锁后打印死锁路径和堆栈信息
到标准输出,然后直接退出。
支持RWMtex 、Mutex。使用方式和sync.RWMutex、sync.Mutex 一致