美文网首页
iOS多读单写

iOS多读单写

作者: LV大树 | 来源:发表于2024-04-09 00:25 被阅读0次

看了很多文章,总有自己的一套。套套不同。

case1

在开发中,我们经常会用到针对一个数据存储的多读单写功能。dispatch_barrier_async就能实现该功能,保证你在读的过程中可以多并发,写的过程中可以阻塞其他操作。
https://www.jianshu.com/p/2d25ad26680d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

case2

怎样实现多读单写?

比如在内存中维护一份数据,有多处地方可能会同时操作这块数据,怎么能保证数据安全?

1.读写互斥

2.写写互斥

3.读读并发

要想满足上面的三点该怎么实现呢?

https://www.jianshu.com/p/be2e405f952c

case3

首先,我们需要创建一个私有的并行队列来处理读写操作。
在这里不应该使用globe_queue, 因为我们通过dispatch_barrier_async来保证写操作的互斥,我们不希望写操作阻塞住globe_queue中的其他不相关任务,我们只希望在写的同时,不会有其他的写操作或者读操作。
同时,也不推荐给队列设置优先级,多数情况下使用default就可以了。而改变优先级往往会造成一些无法预料的问题,比如优先级反转(具体的可以参看参考文献)。
dispatch_barrier_async的block运行时机是,在它之前所有的任务执行完毕,并且在它后面的任务开始之前,期间不会有其他的任务执行。注意在barrier执行的时候,队列本质上如同一个串行队列,其执行完以后才会恢复到并行队列。
另外一个值得注意的问题是,在写操作的时候,我们使用dispatch_async,而在读操作的时候我们使用dispatch_sync。很明显,这2个操作一个是异步的,一个是同步的。我们不需要使每次程序执行的时候都等待写操作完成,所以写操作异步执行,但是我们需要同步的执行读操作来保证程序能够立刻得到它想要的值。(写操作是异步,不需要等待结果,直接返回;读操作是同步,需要等待读结果,是同步)。

https://www.jianshu.com/p/38c7e2510196

相关文章

  • iOS多读单写

    在开发中,我们经常会用到针对一个数据存储的多读单写功能。dispatch_barrier_async就能实现该功能...

  • iOS多读单写

    https://www.jianshu.com/p/2d25ad26680d?utm_campaign=males...

  • iOS 多读单写,栅栏函数` dispatch_baarrier

    iOS 多读单写 以及栅栏函数讲解dispatch_barrier_async dispatch_barrier_...

  • iOS pthread_rwlock 实现多读单写

    iOS pthread_rwlock 实现多读单写 上面的代码用到了读写锁,读操作是共享的,可以多线程同时读取,写...

  • iOS-多线程-读写安全

    用dispatch_barrier_sync实现多读单写,用dispatch_semaphore实现单读单写

  • 多读单写

    多读单写的意思:可以多个读者同时读取数据,而在读数据的时候不能写入数据,并且在写的过程中,不能有其他读者去写,即读...

  • 【线程】线程安全-多读单写

    多读单写 理解多读单写: 一、采用dispatch_barrier实现; 总结 二、采用rwlock读写锁实现 示...

  • iOS 多线程面试题(dispatch_barrier_asyn

    dispatch_barrier_async 1、问:怎么用GCD实现多读单写? 多读单写的意思就是:可以多个读者...

  • iOS中的多读单写问题

    我们知道iOS中的数组和字典是线程不安全的。多线程编程中,当多个线程对同一个字典dictionary进行多读单写操...

  • iOS中的多读单写问题

    我们知道iOS中的数组和字典是线程不安全的。多线程编程中,当多个线程对同一个字典dictionary进行多读单写操...

网友评论

      本文标题:iOS多读单写

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