2 dongdongcoder dongdongcoder 于 2016.03.24 15:03 提问

dispatch_sync block中的线程问题

图片说明

dispatch_queue_t myQueue = dispatch_queue_create("com.team", NULL);

NSLog(@"task1 == %@",[NSThread currentThread]);
dispatch_sync(myQueue, ^{
  // task2 为什么在主线程执行,不是应该在block追加到的线程执行吗,就像task4一样,block里的线程应该和 dispatch_sync 的第一个参数的线程相同
    NSLog(@"task2 == %@",[NSThread currentThread]);

});

dispatch_async(myQueue, ^{
    NSLog(@"task3 == %@",[NSThread currentThread]);

    dispatch_sync(dispatch_get_main_queue(), ^{
        NSLog(@"task4 == %@",[NSThread currentThread]);

    });
});

    ![图片说明](http://img.ask.csdn.net/upload/201603/24/1458802918_681208.png)

1个回答

oyljerry
oyljerry   Ds   Rxr 2016.03.24 20:43

编译器会有优化,他发现sync方式,就可能直接同一个线程执行

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!