如何在类方法中使用dispatch_sync但访问同一个队列?

时间:2014-03-20 18:46:08

标签: objective-c multithreading grand-central-dispatch

我需要在我的类方法中使用GCD dispatch_sync。但据我了解,为了使线程安全,我需要在每个类方法中引用相同的队列?如果在以下代码中,我无法访问_concurrentQueue,因为这将在此类的实例中,但此调用没有实例方法(即所有静态方法)。如果我创建一个具有相同标签的新调度队列(即com.company.cacheConcurrentQueue),如果我同时调用doBigThingsdoOtherThings(一个接一个地调用),那么它将使用相同的队列?

_conQueue = dispatch_queue_create("com.company.cacheConQueue",
                                             DISPATCH_QUEUE_CONCURRENT);
 +doBigThings {

   dispatch_sync(_conQueue, ^{
      do something...
   });

 }

 +doOtherThings {

   dispatch_sync(_conQueue, ^{
      do something...
   });

 }

1 个答案:

答案 0 :(得分:0)

首先,我会仔细检查您是否真的想使用dispatch_sync。 dispatch_sync等待块完成执行,因此您只能从后台线程执行此操作。

现在你需要做的就是编写一个函数(只需输入它,所以你需要编译它)

static void dispatch_on_my_queue (dispatch_block_t block)
{
    static dispatch_queue myQueue;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        my_queue = dispatch_queue_create (...);
    });

    dispatch_sync (my_queue, block);
}

并从任何地方拨打电话。