Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:理解NSLock死锁_Swift_Nslock - Fatal编程技术网

Swift:理解NSLock死锁

Swift:理解NSLock死锁,swift,nslock,Swift,Nslock,使用NSLock在日志中查看此消息: *** -[NSLock lock]: deadlock (<NSLock: 0x6100000cbec0> '(null)') *** Break on _NSLockError() to debug. ***-[NSLock lock]:死锁('(null)' ***中断_NSLockError()以进行调试。 这是否意味着应用程序遇到致命错误并将停止工作?或者这是以某种“优雅”的方式处理的?斯威夫特与这里的行为无关。这不是撞车。请注意,

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

*** -[NSLock lock]: deadlock (<NSLock: 0x6100000cbec0> '(null)')
*** Break on _NSLockError() to debug.
***-[NSLock lock]:死锁('(null)'
***中断_NSLockError()以进行调试。

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

斯威夫特与这里的行为无关。这不是撞车。请注意,锁不是可重入的锁,因此在已有锁的情况下调用
lock
将导致死锁。如果主线程死锁,或一个或多个线程在后台死锁,应用程序将出现卡住,导致未定义的行为,如数据未到达、任务未处理等。

死锁,根据定义,意味着相关线程无法继续。Swift不会“处理”死锁,而只是通知您发生了这种情况

此死锁在应用程序中的表现方式取决于与该线程关联的代码所执行的操作。但是,很明显,无论它是什么,它都永远不会完成,并且该线程的资源也永远不会被恢复。如果此死锁发生在主线程上,应用程序将冻结


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

它的意思是您应该将代码发布到您调用的位置。
[NSLock]
(无论这个问题涉及到什么线程,都不会返回,这是一件坏事)我理解死锁发生的原因(因此我没有发布代码)。我的问题是当死锁发生时,Swift/NSLock如何处理死锁。