iOS GCD详解(二)

2017-11-15  本文已影响61人  无言w_y

使用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;
    });
}

上一篇 下一篇

猜你喜欢

热点阅读