IOS多线程

ios中常见的多线程方案:

多线程容易混淆的术语:

多线程各种队列的执行效果:

Syn 往当前的串行队列中添加任务就会产生死锁,会卡住当前的串行对列。

所以我们需要线程加锁(又叫线程同步)的方案,IOS中线程加锁的方式有以下几种:

OSSpinlock又叫自旋锁,等待锁的线程会处于盲等(busy-wait)状态,一直占用着cpu的资源,目前已经不再安全,可能出现优先级反转问题,如果等待锁的线程优先级比较高,它会一直占用cpu的资源,优先级低的线程就无法释放锁。使用方法:

pthread_mutex又叫互斥锁,等待锁的线程会处于休眠状态,使用方法:

pthread_mutex - 条件锁

NSLock是对mutex普通锁的封装,NSRecursiveLock是对mutex递归锁的封装,两个锁的使用方法:

NSCondition是对mutex和cond的封装,使用方法

NSConditionLock是对NSCondition的进一步封装,可以设置具体的条件值,使用方法

dispatch_semaphore又叫信号量,信号量的初始值,可以用来控制线程并发访问的最大数量,信号量的初始值为1,代表同时只允许一条线程访问资源,保证线程同步。使用方法:

@synchronized是对mutex递归锁的封装,源码查看objc4中的objc—sync.mm文件,@synchronized(obj)内部会生成obj对应的递归锁,然后进行加锁解锁操作,使用方法:


ios线程同步方案性能比较

自旋锁,互斥锁比较:

pthread_rwlock又叫读写锁,等待锁的线程会进入休眠,使用方法:

注释:递归锁只是对同一个线程可以重复加锁。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一. 多线程 1.常见多线程方案 pthread : 纯粹 C 语言的API,跨平台, 线程生命周期程序员管理...
    天明天阅读 9,654评论 0 14
  • 一 iOS多线程介绍 二 线程同步方案 一 iOS多线程介绍 首先我们先了解一下关于线程的几个概念: 1 什么是进...
    当前明月阅读 3,701评论 0 2
  • 在多线程开发中,经常会遇到多个操作同时访问同一个资源的情况,如果处理不好,很容易造成数据错乱和数据安全的问题。为了...
    JC一直在路上阅读 4,645评论 0 1
  • 1. 什么情况下会有线程隐患? 我们在使用多线程技术带来的便利的同时,也需要考虑下多线程所带来的隐患。比如,我们可...
    沉江小鱼阅读 4,286评论 0 11
  • 什么会给多线程的安全造成隐患? 有了多线程技术支持,我们可以并发的进行多个任务,因此同一块资源就有可能在多个线程中...
    RUNNING_NIUER阅读 8,620评论 6 32

友情链接更多精彩内容