美文网首页
IOS 自旋锁和互斥锁 

IOS 自旋锁和互斥锁 

作者: FengxinLi | 来源:发表于2017-10-17 14:07 被阅读210次

    自旋锁和互斥锁

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

    不同点:

    互斥锁:如果共享数据已经有其他线程加锁了,线程会进入休眠状态等待锁。一旦被访问的资源被解锁,则等待资源的线程会被唤醒。

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

    自旋锁的效率高于互斥锁。

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

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

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

    atomic 原子属性(线程安全),保证同一时间只有一个线程能够写入(但是同一个时间多个线程都可以取值),atomic 本身就有一把锁(自旋锁)

    atomic:线程安全,需要消耗大量的资源

    nonatomic:非线程安全,不过效率更高,一般使用nonatomic

    相关文章

      网友评论

          本文标题: IOS 自旋锁和互斥锁 

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