使用NSLock在日志中看到此消息
*** -[NSLock lock]: deadlock (<NSLock: 0x6100000cbec0> '(null)')
*** Break on _NSLockError() to debug.这是否意味着应用程序遇到了致命错误并将停止工作?还是以某种“优雅”的方式来处理?
发布于 2016-10-15 22:49:38
根据定义,死锁意味着所讨论的线程不能继续进行。Swift并不“处理”死锁,而只是通知您发生了这种情况。
此死锁在应用程序中的表现方式取决于与该线程关联的代码所做的事情。但是,很明显,不管它是什么,它永远不会完成,用于该线程的资源也将永远不会被恢复。如果这个死锁发生在主线程上,应用程序就会冻结。
总之,此消息的目的不是告诉您死锁已被处理,而是相反,告诉您无法处理死锁,因此,您有责任修复代码以消除此问题。
发布于 2016-10-15 22:32:04
斯威夫特和这里的行为无关。这不是撞车。注意,锁不是可重入的锁,因此在您已经拥有锁时调用lock将导致死锁。如果主线程处于死锁状态,或者一个或多个线程在后台陷入僵局,则应用程序会出现卡住状态,从而导致未定义的行为,如数据未到达、任务未处理等。
https://stackoverflow.com/questions/40064580
复制相似问题