gpt4 book ai didi

ios - 为什么在当前队列中调用 dispatch_sync 不会导致死锁

转载 作者:可可西里 更新时间:2023-11-01 17:05:45 25 4
gpt4 key购买 nike

苹果文档说:(concurrencyProgrammingGuide,page49)重要提示:您永远不应从计划传递给函数的同一队列中执行的任务调用 dispatch_sync 或 dispatch_sync_f 函数。这对于保证死锁的串行队列尤为重要,但对于并发队列也应避免。

但是这里的代码不会导致死锁,因为我已经运行了很多次了:

    dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(concurrentQueue, ^(){
NSLog(@"in outer queue: %@", [NSThread currentThread]);
dispatch_sync(concurrentQueue, ^(){
NSLog(@"do someting thread: %@", [NSThread currentThread]);
});
});

然而,我们都知道,在主线程上下文中,如果我们执行下面的代码,就会导致主线程死锁。所以我很困惑为什么在同一个线程中调用 dispatch_sync,一个不是死锁(上面的代码),另一个相反(下面的代码)?

        dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"________update__UI");
});

最佳答案

dispatch_get_global_queue() 返回一个系统定义的全局并发队列。

关于ios - 为什么在当前队列中调用 dispatch_sync 不会导致死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31157224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com