首页 > 试题广场 >

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

[单选题]
以下代码输出顺序是?(      )
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
NSLog(@"1");
});
dispatch_sync(queue, ^{
sleep(1);
NSLog(@"2");
});
dispatch_async(queue, ^{
NSLog(@"3");
});
  • 1, 2, 3
  • 1, 3, 2
  • 3, 1, 2
  • 1和3顺序不确定 ,2
<p>为什么只有这些答案呢,不是因该先输出2,然后输出1,3么</p><p><br></p>
发表于 2020-11-18 02:36:52 回复(1)
<p>由于1是异步执行,2是同步执行,所以只有等2执行完成才能执行3,又由于2中加入了一个延时1秒执行,所以此时1会执行完成</p>
发表于 2020-12-17 19:19:23 回复(0)
2是同步执行,假如将延时改成0.2,此时2会先与1执行。题中延时1秒,1先执行。
发表于 2022-02-22 16:04:06 回复(0)
1先异步地放入队列
2接着同步地放入队列
3在2执行完之后再放入队列。
由于2中有sleep1秒,所以1会优先得到线程资源,先执行完毕;接着是2;接着是3
发表于 2022-11-30 00:58:19 回复(0)