队列是来自调用方的参数。我想知道输入dispatch_queue_t的类型(串行或并发),因为我将以不同的方式处理它。
有可能吗?以及如何检查它?
发布于 2013-01-20 03:21:33
如果你所拥有的只是一个“别人”传给你的dispatch_queue_t,你就没有办法知道。这些信息实际上对你是隐藏的。如果您自己创建队列,那么您可以使用dispatch_queue_set_specific和dispatch_queue_get_specific在队列的上下文数据中存储一个值,然后再读出该值,但是如果您没有创建队列,那么您就没有那么幸运了。
FWIW,这类暗示了一种脆弱的设计/反模式。将队列作为参数表示您将调度块以供将来在该队列上执行。从这个角度来看,队列是并发的还是串行的都无关紧要。
更重要的是,您的代码应该这样编写,无论它是在串行队列上执行还是在并发队列上执行。如果它使用共享资源,那么它应该同步对这些资源的访问,以便如果它在并发队列上执行,则对这些资源的访问将是安全的。相反,避免在串行队列上运行会出现问题的情况(即,不要试图通过对可能是串行队列的队列使用dispatch_sync来实现递归锁定)。
发布于 2013-01-21 09:06:00
在GCD中确保在调用者提供的任意队列上序列化执行的惯用方法是创建您自己的串行队列,并将调用者提供的队列设置为您的队列的目标队列(使用dispatch_set_target_queue(3) API)。
https://stackoverflow.com/questions/12399645
复制相似问题