IOSbug

ios用队列代替锁的代码

2015-07-08  本文已影响238人  司马捷

一个替代方法是使用 GCD 的分发队列。将读和写分发到相同并发队列中,这样读操作会是并发的,多个线程可以同时执行写操作;而对于写操作,以分发栅栏(dispatch barrier)保证同时只有一个线程可以执行写操作,并且由于写操作无需返回,写操作还是异步马上返回的。这样,就得到了一个高效且线程安全的锁。代码看起来会像这样:

_syncQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
-(NSInteger)cake {
__block NSInteger localCake;
dispatch_sync(_syncQueue, ^{
localCake = _cake;
});
  return localCake;
 }
-(void)setCake:(NSInteger)cake {
dispatch_barrier_async(_syncQueue, ^{
    _cake = cake;
 });
}
上一篇下一篇

猜你喜欢

热点阅读