自旋锁和互斥锁的区别

  • 相同点
    都能保证同一时间内只有一个线程访问共享资源,都能保证线程安全

  • 不同点
    互斥锁:如果共享数据已经有其他线程加锁了,线程就会就如休眠状态等待,一袋访问的资源解锁,则等待资源的线程立即执行

自旋锁:如果共享数据已经有其他线程加锁了,线程会以死循环的方式等待锁,一单被访问的资源被解锁,则等待资源的线程会立即执行

自旋锁的效率高于互斥锁

加了互斥锁的代码,当新线程访问时,如果发现其他线程正在执行锁定的代码,新线程就会进行休眠

加了自旋锁,当新线程访问代码时,如果发现有其他线程正在执行锁定的代码,新线程就会死循环的方式,一直等待锁定的代码执行完成,相当于不停常识执行代码,比较消耗性能

nonatomic 非原子属性,同一时间可以有很多线程读和写

atomic 原子属性,同一时间只能有一个线程写入,但可以有多个线程去取值,atomic本来就有一把锁(自旋锁)

atomic 线程安全,需要消耗大量资源
nonatomic 非线程安全,效率更高,一般使用nonatomic

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 首先借鉴一张ibireme各种锁性能对比图镇楼 自旋锁与互斥锁的区别 从实现原理上来讲,互斥锁属于sleep-wa...
    whlpkk阅读 12,636评论 0 16
  • POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。线程同步(Thre...
    北辰青阅读 4,558评论 0 1
  • 自旋锁是一种互斥锁的实现方式而已,相比一般的互斥锁会在等待期间放弃cpu,自旋锁(spinlock)则是不断循环并...
    开发者老岳阅读 33,272评论 0 7
  • 自旋锁和互斥锁相同点:都能保证同一时间只有一个线程访问共享资源。都能保证线程安全。不同点:互斥锁:如果共享数据已经...
    云海绽放阅读 3,770评论 0 0
  • 自旋锁和互斥锁 相同点:都能保证同一时间只有一个线程访问共享资源。都能保证线程安全。 不同点: 互斥锁:如果共享数...
    FengxinLi阅读 5,672评论 0 2