首页 > 试题广场 >

以下代码输出顺序是?( &n...

[单选题]
以下代码输出顺序是?(      )
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
sleep(1);
NSLog(@"1");
});
dispatch_sync(queue, ^{
NSLog(@"2");
});
dispatch_async(queue, ^{
NSLog(@"3");
});
  • 1, 2, 3
  • 1, 3, 2
  • 2, 3, 1
  • 2, 1和3的顺序不确定
答案错的吧,我运行代码,231和213都出现,异步执行不能确定第三个就一定比休眠了一秒的要快吧
发表于 2021-04-23 16:19:54 回复(0)
三个任务都放入队列中执行。2为马上执行任务,直到结束,13为派发给gcd线程池,委托线程池将两个任务按优先级进行线程分配,二者优先级一致,故调度平等,也就是执行时机可近似看为同时。然后,1有休眠1秒,这个时间太长了,故231.
编辑于 2022-11-29 18:05:38 回复(0)
不用太纠结这个答案吧,1s对于理想状态足够长了,只是考察的思想
发表于 2022-06-23 00:57:30 回复(0)
运行代码多次得到231。应该是和运行速度有关系,我将sleep(1)改成(0.5),就213了。
发表于 2022-02-21 11:27:38 回复(0)
sleep(1)  改成 usleep(1), 结果就是 213 ,  题目有疑吗?  是不是也要看异步操作的耗时呢? 
发表于 2021-11-16 16:27:02 回复(0)
有点想不明白,全局队列为并行队列,异步执行,任务同时进行,就一定能保证3的实行速度比sleep快吗,这个没有必然的联系吧。
发表于 2021-03-20 14:49:36 回复(0)
dispatch中的async和sync的作用:是否阻塞当前执行代码的线程。
dispatch中的queue的串行和并行:队列中的后面的任务(block)是否需要等待前面的任务执行完?串行队列需要等待,并行队列则不需要等待。
发表于 2020-10-27 09:38:15 回复(0)