簡體   English   中英

Swift:了解NSLock死鎖

[英]Swift: Understanding NSLock deadlock

使用NSLock在我們的日志中看到此消息:

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

這是否意味着該應用程序遇到致命錯誤並將停止工作? 還是以某種“優雅”的方式處理?

根據定義,死鎖意味着所討論的線程無法繼續進行。 Swift不會“處理”僵局,而只是通知您發生了這種情況。

此死鎖如何在您的應用程序中顯現出來取決於與該線程關聯的代碼在做什么。 但是,顯然,無論它是什么,它將永遠不會完成,並且該線程的資源也將永遠無法恢復。 如果此死鎖發生在主線程上,則該應用程序將凍結。

最重要的是,此消息的目的不是告訴您已處理了死鎖,而是相反地告訴您無法處理死鎖,因此,您有責任將代碼修復為消除這個問題。

Swift與此處的行為無關。 這不是崩潰。 請注意,鎖不是重入鎖,因此調用lock ,而你已經擁有的鎖會導致死鎖。 如果主線程死鎖,或者一個或多個線程在后台死鎖,則該應用程序將顯示卡住,從而導致未定義的行為,例如數據未到達,任務未處理等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM