dispatch_barrier_async not word with dispatch_get_global_que



有我的代码:

dispatch_queue_t queue =  dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//    dispatch_queue_t queue = dispatch_queue_create("zxc", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
    NSLog(@"1");
});
dispatch_async(queue, ^{
    NSLog(@"3");
});
dispatch_async(queue, ^{
    NSLog(@"4");
});
dispatch_barrier_async(queue, ^{
    NSLog(@"write");
});
dispatch_async(queue, ^{
    NSLog(@"5");
});
dispatch_async(queue, ^{
    NSLog(@"2");
});
dispatch_async(queue, ^{
    NSLog(@"7");
});
dispatch_async(queue, ^{
    NSLog(@"6");
});

dispatch_barrier_async不适用于dispatch_get_global_queue,但可以处理dispatch_queue_create("zxc", DISPATCH_QUEUE_CONCURRENT);

为什么?

正确。不能在全局队列上设置障碍。您只能在自己创建的专用队列上设置障碍。如 dispatch_barrier_async 文档中所述:

您指定的队列应该是您使用 dispatch_queue_create 函数自行创建的并发队列。如果传递给此函数的队列是串行队列或全局并发队列之一,则此函数的行为类似于dispatch_async函数。

最新更新