concurrentQueue+sync read+barrier async write

参考:https://www.jianshu.com/p/ae1cef1f3187

并发读互斥写(Concurrent read,Exclusive write)

concurrentQueue+sync read+barrier async write

- (dispatch_queue_t)syncQueue
{
    static dispatch_queue_t queue = nil;
    
    static dispatch_once_t onceToken;
    
    dispatch_once(&onceToken, ^{
        queue = dispatch_queue_create("com.xxx.xxx", DISPATCH_QUEUE_CONCURRENT);
    });
    
    return queue;
}
- (NSUInteger)count
{
    __block NSUInteger result;
    
    dispatch_sync(self.syncQueue, ^{
    });
    
    return result;
}
- (id)objectAtIndex:(NSUInteger)index
{
    __block id result;
    
    dispatch_sync(self.syncQueue, ^{
    });
    
    return result;
}
- (void)removeAllObjects
{
    dispatch_barrier_async(self.syncQueue, ^{
    });
}
- (void)addObject:(id)anObject
{
    dispatch_barrier_async(self.syncQueue, ^{
    });
}

补充

@synchronized (self) {
}
dispatch_sync(self.syncQueue, ^{
});

- (dispatch_queue_t)syncQueue 
{
    static dispatch_queue_t queue = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        queue = dispatch_queue_create("com.xxx.xxx", DISPATCH_QUEUE_SERIAL);
    });
    return queue;
}
@property (nonatomic, strong) NSRecursiveLock *lock;

- (NSRecursiveLock *)lock
 {
    static NSRecursiveLock *internalLock = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        internalLock = [[NSRecursiveLock alloc] init];
    });
    return _lock = internalLock;
}

[self.lock lock];
[self.lock unlock];

你可能感兴趣的:(concurrentQueue+sync read+barrier async write)