gpt4 book ai didi

ios - dispatch_set_target_queue 是如何工作的?

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

由于dispatch_set_target_queue资料不足,特来求助,万分感谢!

这是我的测试代码:

dispatch_queue_t mySerialDispatchQueue1 = dispatch_queue_create("come.itenyh", NULL);
dispatch_queue_t mySerialDispatchQueue2 = dispatch_queue_create("come.itenyh1", NULL);

dispatch_set_target_queue(mySerialDispatchQueue1, mySerialDispatchQueue2);

dispatch_async(mySerialDispatchQueue1, ^{[self task:@"s1"];});

dispatch_async(mySerialDispatchQueue2, ^{[self task:@"p1"];});

dispatch_async(mySerialDispatchQueue1, ^{[self task:@"s2"];});

- (void)task:(NSString *)taskid
{

NSLog(@"Now executing taskid:%@", taskid);

[NSThread sleepForTimeInterval:5];

}

现在如果我设置

 dispatch_set_target_queue(mySerialDispatchQueue2, mySerialDispatchQueue1);

那么结果是:

2014-04-16 22:23:49.581 ITGCDLearning[66758:1303] Now executing taskid:s1
2014-04-16 22:23:54.585 ITGCDLearning[66758:1303] Now executing taskid:s2
2014-04-16 22:23:59.586 ITGCDLearning[66758:1303] Now executing taskid:p1

相反,如果我设置

dispatch_set_target_queue(mySerialDispatchQueue1, mySerialDispatchQueue2);

那么结果是:

2014-04-16 22:28:37.910 ITGCDLearning[66795:1303] Now executing taskid:s1
2014-04-16 22:28:42.913 ITGCDLearning[66795:1303] Now executing taskid:p1
2014-04-16 22:28:47.915 ITGCDLearning[66795:1303] Now executing taskid:s2

我知道dispatch_set_target_queue函数可以

  • 改变队列的优先级
  • 创建调度队列的层次结构。

我认为是第二点导致了我代码中的结果,但不太了解具体的细节。谁能给我解释一下?

最佳答案

根据我的说法,当您将目标队列设置为其他队列时,您正在同步两个队列的任务
第一种情况:

dispatch_set_target_queue(mySerialDispatchQueue2, mySerialDispatchQueue1);

mySerialDispatchQueue1 是目标队列,因此所有添加到 mySerialDispatchQueue2 的任务也从 mySerialDispatchQueue1 入队。因为它是目标队列。所以 mySerialDispatchQueue1 已经有两个任务,所以队列 mySerialDispatchQueue2 中的另一个任务稍后添加。

第二种情况:

dispatch_set_target_queue(mySerialDispatchQueue1, mySerialDispatchQueue2);

你的目标队列是 mySerialDispatchQueue2 所以在开始时没有任务然后来自 mySerialDispatchQueue1 的任务被添加到 mySerialDispatchQueue2 然后它自己的任务正在排队。所以通过这种方式添加了任务。

关于ios - dispatch_set_target_queue 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23112547/

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