美文网首页
底层22: 多线程-atomic

底层22: 多线程-atomic

作者: 张无奈 | 来源:发表于2020-09-09 22:01 被阅读0次

atomic:

用于保证属性setter、getter的原子性操作,相当于在getter和setter内部加了线程同步的锁;

可以参考源码objc4的objc-accessors.mm;

它并不能保证使用属性的过程是线程安全的。(个人理解:在setter,getter方法内部是安全的,但在外面调用的时候并不能保证安全)

nonatomic和atomic区别(atom:原子,不可再分割的单位、atomic:原子性)

给属性加上atomic修饰,可以保证属性的setter和getter都是原子性操作,也就是保证setter和gette内部是线程同步的

原子性操作:个人理解就是不可分割的操作,操作是一个整体,也就是在setter,getter方法前后有加锁的方法,导致里面是一个整体,在没有解锁的情况下别的进来无法操作。

iOS中的读写安全方案

同一时间,只能有1个线程进行写的操作

同一时间,允许有多个线程进行读的操作

同一时间,不允许既有写的操作,又有读的操作

上面的场景就是典型的"多读单写",经常用于文件等数据等读写操作,ios中的实现方案有:

1、pthread_rwlock:(读写锁) 等待锁的线程会进入休眠

2、dispatch_barrier_async:异步栅栏调用

这个函数传入的是并发队列必须是自己通过dispatch_queue-create创建的

如果传入的是一个串行或者是一个全局的并发队列,那这个函数便等同于dispatch_async函数的效果。

IO操作:文件操作

1.从文件中读取内容

2.从文件中写入内容

相关文章

网友评论

      本文标题:底层22: 多线程-atomic

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