一,创建一个串行的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;
}
网友评论