MST
星途 面试题库

面试题:Objective-C多线程死锁的常见场景及简单分析

在Objective-C中,请列举至少两种可能导致多线程死锁的常见场景,并简要分析每种场景下死锁产生的原因。
39.2万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

场景一:资源递归锁定

  • 死锁原因:当一个线程在持有某个锁的情况下,又尝试再次获取同一把锁。例如,一个方法A中获取锁L1,然后在方法A内部调用了另一个方法B,而方法B也尝试获取锁L1,由于锁已经被当前线程持有,它在等待锁的释放,但它自身又不释放锁,从而造成死锁。

场景二:交叉锁

  • 死锁原因:假设有两个线程T1和T2,以及两把锁L1和L2。T1获取了L1,T2获取了L2,然后T1尝试获取L2,T2尝试获取L1。此时,T1等待T2释放L2,T2等待T1释放L1,双方都在等待对方释放锁,形成死锁。