我想创建两个串行队列 A 和 B。其中队列 B 是队列 A 的目标。我想在 B 上排队一些块,并挂起它直到我准备好执行它们,但是我想继续执行块在队列 A 上。

如果我挂起B,这是否还会挂起它的目标队列(队列A)?

我的想法是我想安排这些特定块(在队列 B 上)在以后(未指定)日期执行,但是我不希望它们同时运行(这涉及核心数据 ^_^)而且我不希望想处理信号量。但我希望队列 A 继续处理它的块,而 B 被暂停

如果不清楚,这里有一些示例代码

dispatch_queue_t queueA = dispatch_queue_create("app.queue.A");
dispatch_queue_t queueB = dispatch_queue_create("app.queue.B");

dispatch_set_target_queue( queueB, queueA );

dispatch_suspend( queueB );
/*
*   Add a bunch of blocks to queue B or A
*   Where the ones added to A should execute immediately
*/


//Wait till blocks on queue A have finished and start up B
dispatch_resume( queueB );

dispatch_release(queueA);
dispatch_release(queueB);

最佳答案

dispatch_set_target_queue(queueB, queueA);
dispatch_suspend(queueB);

queueB 挂起,但 queueA 未挂起。
dispatch_set_target_queue(queueB, queueA);
dispatch_suspend(queueA);

queueA 和 queueB 被挂起。

10-07 19:26
查看更多