gpt4 book ai didi

objective-c - 使用 GCD 的 FIFO 串行队列

转载 作者:太空狗 更新时间:2023-10-30 03:09:47 26 4
gpt4 key购买 nike

我正在尝试为我工作的公司创建一个(网络)同步数组。虽然网络部分工作正常,但我已经深入研究了一个问题。

我的愿望是使用 dispatch_create_queue 创建一个新队列,我会向其中添加两个在主线程上运行但以串行方式运行的 block ,这意味着首先必须运行第一个 block ,然后是第二个 block ,并且永远不会并行运行。

我已经阅读了 apple 文档,但至少可以说是令人困惑。

  • 当我使用 dispatch_queue_create 创建我的队列,然后使用 dispatch_sync 添加 block (在它们被定义之后)时,我发现 block 是仍在主线程上执行。

  • 当使用 dispatch_async 时,即 block 不在主线程上执行的时候。

  • 当我尝试使用 dispatch_sync 添加两个 block 时,它们会被永远阻止。

  • 唯一一次两个 block 似乎都运行良好并且脱离了主线程是在调用 dispatch_async 时。

然而,我选择 GCD 和同步方法的原因让我觉得我正在创建一个新队列(因此​​是一个新线程)并且向该队列添加 block 只会阻塞一个直到另一个有执行完毕。是不是这样,还是创建队列并不能保证代码不会在主线程上运行?

最佳答案

这是 GCD 中的一个 FIFO 队列:

dispatch_queue_t serialQueue = dispatch_queue_create("com.blah.queue", DISPATCH_QUEUE_SERIAL);

...
dispatch_async(serialQueue, ^{
//block1
});

dispatch_async(serialQueue, ^{
//block2
});

关于objective-c - 使用 GCD 的 FIFO 串行队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14128759/

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