Swift:了解NSLock死锁

时间:2016-10-15 21:52:23

标签: swift nslock

使用NSLock在我们的日志中查看此消息:

*** -[NSLock lock]: deadlock (<NSLock: 0x6100000cbec0> '(null)')
*** Break on _NSLockError() to debug.

这是否意味着应用程序遇到致命错误并将停止工作?或者这是以某种优雅的方式处理的。时尚?

2 个答案:

答案 0 :(得分:3)

根据定义,死锁意味着有问题的线程无法继续。斯威夫特不会处理&#34;僵局,但只是告诉你发生了这种情况。

这个死锁如何在你的应用程序中显示出来取决于与该线程关联的代码正在做什么。但是,显然,无论它是什么,它永远不会完成,并且该线程的资源永远不会被恢复。如果这个死锁发生在主线程上,应用程序将冻结。

最重要的是,此消息的目的不是要告诉您死锁已被处理,而是相反,告诉您它无法处理,因此,它是&#39;你有责任修复代码以消除这个问题。

答案 1 :(得分:1)

斯威夫特与这里的行为无关。这不是崩溃。请注意,锁不是可重入锁,因此在已经锁定时调用lock将导致死锁。如果主线程死锁,或者一个或多个线程在后台死锁,应用程序将显示卡住,导致未定义的行为,例如数据未到达,任务未处理等等。