首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检测调度队列的类型(串行或并发)?

如何检测调度队列的类型(串行或并发)?
EN

Stack Overflow用户
提问于 2012-09-13 12:58:49
回答 2查看 1.9K关注 0票数 10

队列是来自调用方的参数。我想知道输入dispatch_queue_t的类型(串行或并发),因为我将以不同的方式处理它。

有可能吗?以及如何检查它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-20 03:21:33

如果你所拥有的只是一个“别人”传给你的dispatch_queue_t,你就没有办法知道。这些信息实际上对你是隐藏的。如果您自己创建队列,那么您可以使用dispatch_queue_set_specificdispatch_queue_get_specific在队列的上下文数据中存储一个值,然后再读出该值,但是如果您没有创建队列,那么您就没有那么幸运了。

FWIW,这类暗示了一种脆弱的设计/反模式。将队列作为参数表示您将调度块以供将来在该队列上执行。从这个角度来看,队列是并发的还是串行的都无关紧要。

更重要的是,您的代码应该这样编写,无论它是在串行队列上执行还是在并发队列上执行。如果它使用共享资源,那么它应该同步对这些资源的访问,以便如果它在并发队列上执行,则对这些资源的访问将是安全的。相反,避免在串行队列上运行会出现问题的情况(即,不要试图通过对可能是串行队列的队列使用dispatch_sync来实现递归锁定)。

票数 8
EN

Stack Overflow用户

发布于 2013-01-21 09:06:00

在GCD中确保在调用者提供的任意队列上序列化执行的惯用方法是创建您自己的串行队列,并将调用者提供的队列设置为您的队列的目标队列(使用dispatch_set_target_queue(3) API)。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12399645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档