iOS 保证数据的线程安全

一,创建一个串行的GCD队列

二,用GCD栏栅函数dispatch_barrier_async和dispatch_barrier_sync

因为读取是并发的并且同步的因为需要马上得到返回的结果 ,写必须是单独执行的。栅栏函数的作用是分割函数执行,只有执行完栅栏函数以后才可以执行后面的任务,利用这个特点,可以把写操作放在栅栏函数里,这样等数据修改完以后才可以读取。保证了线程安全。

- (void)setValue:(NSString *)value

forHTTPHeaderField:(NSString *)field

{

    dispatch_barrier_async(self.requestHeaderModificationQueue, ^{

        [self.mutableHTTPRequestHeaders setValue:value forKey:field];

    });

}

- (NSString *)valueForHTTPHeaderField:(NSString *)field {

    NSString __block *value;

    dispatch_sync(self.requestHeaderModificationQueue, ^{

        value = [self.mutableHTTPRequestHeaders valueForKey:field];

    });

    return value;

}

三,使用锁

你可能感兴趣的:(iOS 保证数据的线程安全)