美文网首页IOSbug
ios用队列代替锁的代码

ios用队列代替锁的代码

作者: 司马捷 | 来源:发表于2015-07-08 16:48 被阅读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;
 });
}

相关文章

  • ios用队列代替锁的代码

    一个替代方法是使用 GCD 的分发队列。将读和写分发到相同并发队列中,这样读操作会是并发的,多个线程可以同时执行写...

  • iOS 中常见的几种锁-代码示例

    iOS 中常见的几种锁-代码示例 iOS 中常见的几种锁-代码示例

  • 关于dispatch_barrier_async和dispatc

    在iOS多线程中,我们可以用GCD的串行队列来实现同步锁的效果。通过在把任务添加到串行队列中来依次执行,达到同步的...

  • iOS 周刊 第一期

    一.多线程安全方案 1.用同步锁,但是很影响性能 2.用NSLock,也是锁机制 3.用派发队列,在并行队列里面,...

  • 2022-01-20

    Go写队列可以用数组直接代替 Go版本:

  • 生产者和消费者模型-队列

    队列(进程通信ipc) 队列主要用于解决进程间通信的问题,队列底层就是通过管道和锁的方式实现的。 代码示例: 主要...

  • GCD练习

    GCD练习 ios 多线程 GCD : ios 多线程 全剧队列,异步执行 线程间通信 信号量 文件锁 单利模式 ...

  • iOS多线程之同步、依赖

    iOS常见的保持数据同步机制: os_unfair_lock 用来代替OSSpinLock自旋锁 OSSpinLo...

  • iOS开发 快手(主app)面试题

    一面 1.iOS有哪几种锁?比较各种锁的优缺点?并给出实例场景判断用哪种锁2.内核态和用户态?写的代码在哪上面?3...

  • 聊聊高并发(八)实现几种自旋锁(三)

    在聊聊高并发(七)实现几种自旋锁(二) 这篇中介绍了两种队列锁,一种是有界队列锁,一种是无界队列锁。其中无界队列锁...

网友评论

    本文标题:ios用队列代替锁的代码

    本文链接:https://www.haomeiwen.com/subject/nmayqttx.html