gpt4 book ai didi

dispatch-async - dispatch_async 阻塞到串行队列是否保持顺序?

转载 作者:行者123 更新时间:2023-12-04 06:41:54 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





dispatch_async vs. dispatch_sync using Serial Queues in Grand Central Dispatch

(3 个回答)


8年前关闭。




当我通过 dispatch_async 将两个块提交到串行队列时,是否确保第二个块在第一个块之后运行:

  • dispatch_async(serial_queue, b1);
  • dispatch_async(serial_queue, b2);

  • 我们可以确保 b1 在 b2 之前运行吗?

    以下是完整的源代码部分:


    #define COUNTER 10000
    m_value = 0;
    dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_queue_t queue = dispatch_queue_create("myqueue", NULL);
    dispatch_group_t group = dispatch_group_create();
    for (int i = 0; i < COUNTER; ++i) {
    dispatch_group_async(group, globalQueue, ^() {
    dispatch_async(queue, ^() {
    ++m_value;
    });
    });
    }
    dispatch_group_notify(group, queue, ^() {
    NSLog(@"m_value Actual: %d Expected: %d", m_value, COUNTER);
    });

    dispatch_release(queue);
    dispatch_release(group);
    queue = nil;
    group = nil;
    return YES;


    我们能保证 m_value == COUNTER 总是吗?谢谢

    最佳答案

    提交到并发队列的块可以同时执行,但是来自 Apple 文档“提交到串行队列的块按 FIFO 顺序一次执行一个。”主队列和您使用 dispatch_create_queue 创建的任何队列都是串行的。

    关于dispatch-async - dispatch_async 阻塞到串行队列是否保持顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11212059/

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