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

自旋锁和互斥锁

作者: 紫菱清风 | 来源:发表于2016-04-23 16:37 被阅读0次

一、多线程环境下的安全问题

  • 由于一个资源可以被多个线程同时访问,这样有可能会导致数据混乱,引发数据的安全问题,所以说在多线程环境下,原子操作是必要的。

  • 本文中介绍一下自旋锁和互斥锁。

    • 自旋锁:当给实例变量的@property设置atomic属性的时候,会给这个变量加一个自旋锁。
    • 互斥锁:通过@synchronized来创建一个互斥锁。多线程环境下,如果访问同一个资源,那么必须使用同一把锁才能锁住。
  • 比如说:去银行自助取款机取钱,如果另外一个地方有个人也在使用你的银行卡号进行存钱,那么此时就使用atomic和nonatomic中的哪个呢?很明显,选择atomic,因为同时进行两个操作,对于同一个账号,很可能会造成数据的混乱,所以必须要进行加锁,限制用户的访问。


二、自旋锁

  • OC在定义属性的时候有atomic和nonatomic两种方式
    • atomic:原子属性,线程安全,需要消耗大量的资源,只会给setter方法加锁,不会给getter方法加锁
    • nonatomic:非原子属性,非线程安全,不会给setter方法加锁,在像iPhone这种内存较小的移动设备上,如果没有多线程间的通信,那么nonatomic就是一个非常好的选择。
    • 一般情况下,我们都只需要在主线程中进行操作的,所以是不需要加锁的。
    • 应用场景:
      比较适合做一些不耗时的操作

三、互斥锁

  • 在多线程开发中,我们采用@synchronized来创建一个互斥锁,保证在同一时刻只有一个线程对其进行操作。
  • 开发中如果需要加锁,只用使用self就行了。
@synchronized(self){
        NSInteger currentNum = self.totalNum;
        if (currentNum > 0) {
            self.totalNum = currentNum - 1;
            NSLog(@"%@卖了一张票,还剩下%zd张票",[NSThread currentThread].name,self.totalNum);
        } else {
            return;
        }
    }

四、互斥锁和自旋锁的比较

  • 共同点:多线程环境下,都可以保证在同一时刻只有一个线程在使用被锁住的代码块。
  • 区别:自旋锁对比互斥锁,它不会在等待上一个线程执行任务结束之前进入睡眠状态,直至上一个任务执行完毕,再进行唤醒和执行任务。因此,互斥锁会比自旋锁锁住的代码执行的时间长。
  • 举例说明:两个人去上厕所,一个人比较急,一个人不急,比较急的相当于是访问自旋锁锁住的代码的那个对象,而不急的那个人是访问互斥锁锁住的代码的那个对象。

相关文章

  • CLH并发队列

    1 什么是自旋锁和互斥锁? 由于CLH锁是一种自旋锁,那么我们先来看看自旋锁是什么? 自旋锁说白了也是一种互斥锁,...

  • iOS面试题与核心基础之线程同步(锁,串行队列,信号量,@syn

    锁 iOS多线程锁有两类 自旋锁 和 互斥锁自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。资源已...

  • iOS 锁

    同步锁 自旋锁 互斥锁

  • iOS底层探索-多线程锁

    多线程的锁大致可分为两大类:互斥锁、自旋锁;也可以分为三类:互斥锁、自旋锁、读写锁。 一、互斥锁:互斥+同步(强调...

  • 线程锁

    1.常见的锁包括:互斥锁,自旋锁。 2.互斥锁是指锁的类型,自旋锁是指锁的实现方式。 3.互斥锁:当上...

  • 自旋锁 和 互斥锁

    自旋锁 和 互斥锁 Pthreads提供了多种锁机制: (1) Mutex(互斥量):pthread_mutex_...

  • 多线程复习

    自旋锁 & 互斥锁 自旋锁:atomic、OSSpinLock、dispatch_semaphore_t临界区加锁...

  • iOS 开发中加锁

    [1].OSSpinLock 自旋锁 [1]自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被...

  • iOS 多线程面试题(自旋锁与互斥锁)

    自旋锁与互斥锁 自旋锁: 是一种用于保护多线程共享资源的锁,与一般互斥锁(mutex)不同之处在于当自旋锁尝试获取...

  • iOS中的自旋锁与互斥锁

    一:自旋锁与互斥锁 自旋锁:是一种用于保护多线程共享资源的锁,与一般互斥锁(mutex)不同之处在于当自旋锁尝试获...

网友评论

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

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