gpt4 book ai didi

objective-c - dispatch_sync 调用变成 dispatch_async 调用

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

我对这段代码的行为有些怀疑:

dispatch_async(queue, ^{
sleep(2);
NSLog(@"step1");

dispatch_sync(queue, ^{
sleep(3);
NSLog(@"step 2");
});

NSLog(@"step 3");
});

我希望从这些行中获得输出 step1 -> step3 -> step2 但我只获得了 step1

如果我将 dispatch_sync 更改为 dispatch_async 它会按预期工作,dispatch_sync 进入 dispatch_async 调用是否会产生此类问题?

回答后编辑----------------

这种情况会造成死锁:

您可以查看已接受的答案以获得对这种情况的解释,并查看此链接以获取文档 http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/dispatch_async.3.html

最佳答案

这是一个僵局。

dispatch_sync 调用将等待 queue 可用,然后运行其 block 并返回,但直到 dispatch_async 才可用已经完成,所以它会坐在那里旋转等待调用 dispatch_sync

关于objective-c - dispatch_sync 调用变成 dispatch_async 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8668585/

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