是否每个线程默认都有一个关联的调度队列?我只是想知道我是否可以在每个上下文中使用dispatch_semaphore
s,或者如果我需要将其包装在具有定义队列的显式调度调用中。
这并不像你的问题所暗示的那样。默认情况下,有一个与主线程关联的主调度队列,以及三个并发的全局队列(分别为高优先级、默认优先级和低优先级)。
并发队列管理它们自己的线程资源,而不是与任何特定的线程相关联。
事实上,它在dispatch_queue_create()
的手册页上非常明确地说:
"队列不绑定到任何特定的执行线程,提交给独立队列的块可以并发执行。"
关于是否可以在调度队列之外使用调度信号量(问题的另一部分),答案是肯定的,可以。它们是在Mach信号量之上实现的,应该可以在任何地方工作。您可以在这里看到代码:
http://opensource.apple.com/source/libdispatch/libdispatch-84.5.5/src/semaphore.c