是否有可能杀死因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
,但线程没有终止。
答案 0 :(得分:2)
如果您查看所有POSIX信息,则可以。
实际上,忘了它。你永远不会让它发挥作用。如果代码中存在死锁,摆脱死锁的唯一方法是修复代码。
BTW,iOS设备上的死锁比崩溃要严重得多。当应用程序崩溃时,许多用户甚至都没有注意到,他们只是再次启动它。当应用程序死锁时,用户需要使用更复杂的过程来手动终止应用程序。通常,我会尽可能避免dispatch_sync
。
答案 1 :(得分:0)
pthread_kill()
在结束它时不会“杀死”一个线程,它只是向它发送一个信号。
选择(尝试)结束线程的功能是pthread_cancel()
。
但是,当代码执行“通过”取消点时,取消只会很愉快。后者定义明确。 See here for a list.