首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift:理解NSLock死锁

Swift:理解NSLock死锁
EN

Stack Overflow用户
提问于 2016-10-15 21:52:23
回答 2查看 2.5K关注 0票数 2

使用NSLock在日志中看到此消息

代码语言:javascript
复制
*** -[NSLock lock]: deadlock (<NSLock: 0x6100000cbec0> '(null)')
*** Break on _NSLockError() to debug.

这是否意味着应用程序遇到了致命错误并将停止工作?还是以某种“优雅”的方式来处理?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-15 22:49:38

根据定义,死锁意味着所讨论的线程不能继续进行。Swift并不“处理”死锁,而只是通知您发生了这种情况。

此死锁在应用程序中的表现方式取决于与该线程关联的代码所做的事情。但是,很明显,不管它是什么,它永远不会完成,用于该线程的资源也将永远不会被恢复。如果这个死锁发生在主线程上,应用程序就会冻结。

总之,此消息的目的不是告诉您死锁已被处理,而是相反,告诉您无法处理死锁,因此,您有责任修复代码以消除此问题。

票数 6
EN

Stack Overflow用户

发布于 2016-10-15 22:32:04

斯威夫特和这里的行为无关。这不是撞车。注意,锁不是可重入的锁,因此在您已经拥有锁时调用lock将导致死锁。如果主线程处于死锁状态,或者一个或多个线程在后台陷入僵局,则应用程序会出现卡住状态,从而导致未定义的行为,如数据未到达、任务未处理等。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40064580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档