读写操作时,为了提高效率,应该允许同时多个线程读操作,并且只有一个线程写操作。
为了实现上面功能,将读和写分发到相同并发队列中,这样读操作会是并发的;而写操作,以 dispatch barrier 来保证同时只有一个线程可以执行写操作,并且由于写操作无需返回,写操作异步执行。
代码如下:
dispatch_queue_t syncQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
- (NSString*)name {
__block NSString *myName;
dispatch_sync(syncQueue, ^{
myName = _name;
});
return myName;
}
- (void)setName:(NSString*)name {
dispatch_barrier_async(syncQueue, ^{
_name = name;
});
}