多线程——原子、非原子,自旋锁和互斥锁无标题文章

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

nonatomic:非原子属性,线程不安全,但是效率高
atomic:原子属性,线程安全,但是效率低

原子属性是一种单线程写,多线程读(单写多读)的多线程技术,不过可能出现脏数据。

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

自旋锁与互斥锁的区别

.相同点:

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

.

.不同点:

互斥锁:如果数据已经有其他线程加锁了,线程会进入休眠等待锁,一旦访问的资源被解锁,则等待资源的线程被唤醒
自旋锁:如果数据已经有线程加锁了,线程会以死循环的方式等待锁,一旦被访问的资源被解锁,则等待资源的线程立即执行‘
自旋锁效率高,因为人家主动,主动的有饭吃

.

开发建议:
所有属性都声明为nonatomic
尽量避免多线程抢夺同一资源

你可能感兴趣的:(多线程——原子、非原子,自旋锁和互斥锁无标题文章)