关闭

多线程——原子、非原子,自旋锁和互斥锁

标签: 线程
3410人阅读 评论(2) 收藏 举报
分类:
  • nonatomic:非原子属性,线程不安全的,效率高
  • atomic:原子属性,线程安全的,效率相对低。
  • 原子属性是一种单(线程)写多(线程)读的多线程技术,不过可能会出现脏数据

    • atomic属性内部的锁称为 自旋锁
    • 凡是线程安全的对象,内部肯定会加锁。

  • 自旋锁和互斥锁
    • 相同点:都能保证同一时间只有一个线程访问共享资源。都能保证线程安全。
    • 不同点:
      • 互斥锁:如果共享数据已经有其他线程加锁了,线程会进入休眠状态等待锁。一旦被访问的资源被解锁,则等待资源的线程会被唤醒。
      • 自旋锁:如果共享数据已经有其他线程加锁了,线程会以死循环的方式等待锁,一旦被访问的资源被解锁,则等待资源的线程会立即执行。
    • 自旋锁的效率高于互斥锁。

IOS开发建议

  • 所有属性都声明为nonatomic
  • 尽量避免多线程抢夺同一块资源
  • 尽量将加锁、资源抢夺的业务逻辑交给服务器端处理,减少移动客户端的压力
1
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:287110次
    • 积分:4506
    • 等级:
    • 排名:第6608名
    • 原创:169篇
    • 转载:1篇
    • 译文:0篇
    • 评论:45条
    博客专栏
    文章分类
    最新评论