使用GCD实现属性的线程安全
本文的完整demo在这里:github。
在多线程编程中,如果有多个线程同时在修改或者读取同一个属性(property)的时候,就出现了竞态条件,容易出错。由于同步串行队列的特性,我们如果把属性(property)的存和取代码放在同一个串行队列中,那么就会根据队列的“一次只能执行一个任务”和“先进先出”原则来实现属性的线程安全。
_serialQueue = dispatch_queue_create("com.Charles.YFPGCDDemo", DISPATCH_QUEUE_SERIAL);
- (NSString *)name {
__weak __block NSString *localSomeString;
dispatch_sync(_serialQueue, ^{
localSomeString = _name;
});
return localSomeString;
}
- (void)setName:(NSString *)name {
dispatch_barrier_async(_serialQueue, ^{
_name = name;
});
}
网友评论