46、不要使用dispatch_get_current_queue
- (NSString *)name {
__block NSString *localName;
// 如果调用方法的队列恰好使_syncQueue,则会死锁 (同步线程里加同步事件)
dispatch_sync(_syncQueue, ^{
localName = _name;
});
return localName;
}dispatch_queue_t queueA = dispatch_queue_create("com.mo.queueA", NULL);
dispatch_queue_t queueB = dispatch_queue_create("com.mo.queueB", NULL);
dispatch_sync(queueA, ^{
dispatch_sync(queueB, ^{
dispatch_block_t block ^{ /* ... */ };
if (dispatch_get_current_queue() == queueA) { // dispatch_get_current_queue 返回的是queueB
block();
} else {
dispatch_sync(queueA, block); // 所以还是会进入死锁
}
});
});Last updated