实现多读单写的原理

单写就不说了,因为栅栏函数就是有这样的特性,需要等之前的block执行完毕,之后的block需要等栅栏函数执行完毕
但是我们使用dispatch_syn的同步方法,为什么能达到多读的效果呢,就是因为,我们所说的同步执行,是指在同一线程里面来说的,当在多个线程中的时候,就没有同步的概念了
我们通过以下代码进行验证

- (void)textSycMutilThread
{
    dispatch_queue_t concurrentQueue = dispatch_queue_create("testkkk", DISPATCH_QUEUE_CONCURRENT);
    dispatch_queue_t concurrentQueue3 = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);

    dispatch_async(concurrentQueue, ^{
        dispatch_sync(concurrentQueue3, ^{
            NSLog(@"111111");
            sleep(10);
            NSLog(@"2222222");
        });
        dispatch_sync(concurrentQueue3, ^{
            NSLog(@"33333");
            sleep(10);
            NSLog(@"444444");
        });
    });
    dispatch_async(concurrentQueue, ^{
        dispatch_sync(concurrentQueue3, ^{
            NSLog(@"55555");
            sleep(10);
            NSLog(@"666666");
        });
    });
}

结果输出

111111
55555
666666
2222222
33333
444444

由此可见,在多线程中,syn并不能达到同步的效果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值