ios - 杀死一个用 dispatch_sync 锁定的线程

标签 ios pthreads grand-central-dispatch

是否可以杀死由于 dispatch_sync 而被锁定的线程?这是代码:

dispatch_sync(q_, ^{
  ...
});

这是锁定时的堆栈跟踪:

#0  0x00007fff8d69951a in semaphore_wait_trap ()
#1  0x00007fff9aad7c5b in _os_semaphore_wait ()
#2  0x0000000100aec692 in _dispatch_barrier_sync_f_slow ()

我尝试使用 pthread_kill 但线程没有终止。

最佳答案

如果你翻遍所有的POSIX资料,是有可能的。

现实中,就算了。你永远不会让它发挥作用。如果代码中存在死锁,摆脱死锁的唯一方法是修复代码。

顺便说一句,iOS 设备上的死锁比崩溃严重得多。当一个应用程序崩溃时,许多用户甚至没有注意到,他们只是重新启动它。当应用程序死锁时,用户需要使用更复杂的过程来手动杀死应用程序。

通常,我会尽可能避免 dispatch_sync

关于ios - 杀死一个用 dispatch_sync 锁定的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28282343/

相关文章:

ios - Cell Swift 中的 UITextView

ios - presentViewController 后黑屏

c++ - 休眠 X 毫秒或线程信号?

multithreading - 与GCD并行进行光线追踪时,线程捕获了正在燃烧的CPU

swift - AudioUnit回调与同步 : how to ensure thread safety with GCD

ios - 从不正确的线程访问的 Realm - Swift 3

El Capitan Xcode 8.2 上的 iOS 开发

ios - 触摸按钮时如何使用 UIScrollview 滚动到页面

c - 在哪些系统上 sleep() 不是 pthread 取消点?

c - 构建线程安全的多平台 C 库的正确方法是什么?