我需要在我的类方法中使用GCD dispatch_sync。但据我了解,为了使线程安全,我需要在每个类方法中引用相同的队列?如果在以下代码中,我无法访问_concurrentQueue
,因为这将在此类的实例中,但此调用没有实例方法(即所有静态方法)。如果我创建一个具有相同标签的新调度队列(即com.company.cacheConcurrentQueue
),如果我同时调用doBigThings
和doOtherThings
(一个接一个地调用),那么它将使用相同的队列?
_conQueue = dispatch_queue_create("com.company.cacheConQueue",
DISPATCH_QUEUE_CONCURRENT);
+doBigThings {
dispatch_sync(_conQueue, ^{
do something...
});
}
+doOtherThings {
dispatch_sync(_conQueue, ^{
do something...
});
}
答案 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);
}
并从任何地方拨打电话。