gpt4 book ai didi

iphone - 为什么对主队列的 dispatch_sync( ) 调用会阻塞主队列?

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

我知道这不是一个强有力的问题,但我必须弄清楚这个概念。

我定义了 myBlock 如下。

void(^myBlock)(void) = ^{
for(int i = 0;i < 10 ; i++)
{
NSLog(@"%d and current queue = %@",i,[NSThread currentThread]);
}
};

现在在 viewDidLoad 方法中,当我在主队列上独立使用 dispatch_sync() 方法时,主队列被阻塞。

这是示例。

- (void)viewDidLoad
{
[super viewDidLoad];
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue,myBlock);
}

但是但是,当我在主线程上使用相同的 dispatch_sync() 函数时 在并发队列上触发的 dispatch_async() 函数 block 中然后主线程不阻塞。

这是示例。

- (void)viewDidLoad
{
[super viewDidLoad];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(queue,^{

dispatch_sync(dispatch_get_main_queue(),myBlock);
});
}

我不清楚为什么会这样?为什么主线程在独立调用dispatch_sync()时阻塞?

最佳答案

在串行队列(如主队列)上使用 dispatch_sync 时,当前线程必须等待,直到执行分派(dispatch)的代码。

当 block 从串行队列同步分派(dispatch)到同一队列时,会发生死锁。

关于iphone - 为什么对主队列的 dispatch_sync( ) 调用会阻塞主队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18740872/

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