mySerialDispatchQueue2

mySerialDispatchQueue2

由于缺少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函数可以
  • 更改队列的优先级
  • 创建调度队列的层次结构。

  • 我认为这是导致代码产生结果的第二点,但实际上并不知 Prop 体细节。有人可以向我解释吗?

    最佳答案

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

    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/

    10-12 05:41