PFUser.m
// 创建并发队列
+ (dispatch_queue_t)_revocableSessionSynchronizationQueue {
static dispatch_queue_t queue;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
queue = dispatch_queue_create("com.parse.user.revocableSession", DISPATCH_QUEUE_CONCURRENT);
});
return queue;
}
//并发读
+ (BOOL)_isRevocableSessionEnabled {
__block BOOL value = NO;
dispatch_sync([self _revocableSessionSynchronizationQueue], ^{
value = revocableSessionEnabled_;
});
return value;
}
// 屏障 同步写
+ (void)_setRevocableSessionEnabled:(BOOL)enabled {
dispatch_barrier_sync([self _revocableSessionSynchronizationQueue], ^{
revocableSessionEnabled_ = enabled;
});
}
总结:dispatch_once 保证执行一次;并发队列,实现 多读 单写。
dispatch_barrier_sync
ordispatch_barrier_async
屏障实现独写操作。