ios - 在一个线程和另一个轮询线程之间共享一个队列

标签 ios multithreading grand-central-dispatch

我正在编写一个 iOS 应用程序,其中多个 iDevice 可以相互连接并相互发送消息。当 iDevice1 向 iDevice2 发送消息时,我希望将该消息插入到 iDevice2 的队列中。 iDevice2 上的一个单独的后台线程现在通过这个队列并使消息出队。我的问题有两个,如下所示:

  1. 实现无限循环(直到应用程序终止)并从队列中轮询和出列项目的后台线程的最佳方法是什么?
  2. 在循环后台线程和将消息插入队列的线程之间共享队列的最佳方法是什么?

我一直在使用 dispatch_async grand central dispatch 方法在不同的线程中执行任务,并且效果很好。我应该使用 dispatch_async 方法来启动轮询队列的后台线程吗?这种方法是否负责切换到其他线程,或者后台线程是否会占用处理器,因为它正在进行无限循环?感谢任何帮助,谢谢!

最佳答案

这里更重要/有趣的问题是,为什么你有一个后台线程(轮询或其他方式)馈入 GCD 队列,而不是简单地使整个事情成为一个基于 GCD 的工作流, block 在一个队列上运行(可能与一个队列相关联)调度源或信号量)将工作提交到工作队列中。换句话说,管理 iDevice1 和 iDevice2 的代码都应该使用 GCD 编写并表达工作流的意图,而不是进行任何手动线程管理。代码将更易于理解和维护!

关于ios - 在一个线程和另一个轮询线程之间共享一个队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12553811/

相关文章:

ios - 如何避免嵌套 block

ios - 一次执行一个调度任务,并在新启动时取消当前

ios - 除非我禁用自动调整 subview ,否则 UIPickerView 会错误地显示值

ios - 通过 TestFlight 安装旧版本

使用多线程的 Java Rest 客户端

python - Flask 中的线程任务队列

ios - 为每个 iPhone 型号提交单独的 IPA

iphone - iOS Quartz UIView 集成

multithreading - 如何停止新对象中的 goroutine?

swift - 在 Swift 中,为什么 GCD 不能与解析一起使用?