最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

[已解决]swift程序死锁挂掉NSLock lock deadlock

Swift crifan 3677浏览 0评论

相关代码:

        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            self.insertLock.lock()
            。。。
               msgTVC.messageList.insert(newMessage, atIndex: curIdx)
               msgTVC.messageList.append(newMessage)
            。。。
            self.insertLock.unlock()
        })

出错:

2016-02-18 18:58:11.733 JianDao[16207:1088768] *** -[NSLock lock]: deadlock (<NSLock: 0x7a06bc90> ‘(null)’)
2016-02-18 18:58:11.734 JianDao[16207:1088768] *** Break on _NSLockError() to debug.

点击 暂停 的那个按钮,然后去调试

搜:

swift NSLock lock deadlock NSLock 0x7a06bc90

swift NSLock lock deadlock NSLock

iphone – How can I set a breakpoint on _NSLockError() – Stack Overflow

(lldb) b _NSLockError
Breakpoint 133: where = Foundation`_NSLockError, address = 0x01a42245

搜:

dispatch_get_main_queue deadlock NSLock

Swift线程安全详解-概念,三种锁,死锁,Atomic,synchronized – Wenchen的专栏 – 博客频道 – CSDN.NET

说了:

NSArray

是线程安全的

-》那么此处就不需要再加锁了?

那去试试:

。。。
                    msgTVC.messageList.insert(newMessage, atIndex: curIdx)
。。。
                msgTVC.messageList.append(newMessage)
            。。。
            self.insertLock.lock()
。。。
           messageTableView.insertRowsAtIndexPaths([insertedRowIndexPath], withRowAnimation: UITableViewRowAnimation.Bottom)
                。。。
                    msgTVC.messageTableView.scrollToRowAtIndexPath(insertedRowIndexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: false)
。。。
            self.insertLock.unlock()

需要待以后,看看是否还会出现此lock出错的问题,才知道是否解决了问题。

后来经过很长时间,至少没有出现类似的死锁了。

算是解决了lock死锁的问题了。

转载请注明:在路上 » [已解决]swift程序死锁挂掉NSLock lock deadlock

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
86 queries in 0.250 seconds, using 22.10MB memory