美文网首页
iOS 锁的使用

iOS 锁的使用

作者: Joshua520 | 来源:发表于2021-01-06 18:09 被阅读0次

简介

自旋锁:在访问被锁资源时,调用者线程不会休眠,而是不停循环在那里,直到被锁资源释放锁。
互斥锁:在访问被锁资源时,调用者线程会休眠,此时cpu可以调度其他线程工作。直到被锁资源释放锁。此时会唤醒休眠线程。

优缺点:
  自旋锁的优点在于,因为自旋锁不会引起调用者睡眠,所以不会进行线程调度,cpu时间片轮转等耗时操作。所有如果能在很短的时间内获得锁,自旋锁的效率远高于互斥锁。
  缺点在于,自旋锁一直占用CPU,他在未获得锁的情况下,一直运行--自旋,所以占用着CPU,如果不能在很短的时 间内获得锁,这无疑会使CPU效率降低。自旋锁不能实现递归调用。

常用锁

  • dispatch_semaphore_t
 dispatch_semaphore_t semphorelock = dispatch_semaphore_create(1);
//加锁
 dispatch_semaphore_wait(semphorelock,DISPATCH_TIME_FOREVER);
//解锁
 dispatch_semaphore_signal(semphorelock);
  • os_unfair_lock
  os_unfair_lock unfairlock = OS_UNFAIR_LOCK_INIT;
//加锁
 os_unfair_lock_lock(&unfairlock);
//解锁
 os_unfair_lock_unlock(&unfairlock);
  • pthread_mutex_t
  pthread_mutex_t mutexlock = PTHREAD_MUTEX_INITIALIZER;
//加锁
pthread_mutex_lock(&mutexlock);
//解锁
 pthread_mutex_unlock(&mutexlock);
  • NSCondition
NSCondition *condition = [[NSCondition alloc] init];
//加锁
[condition lock];
//解锁
 [condition unlock];
  • NSLock
NSLock *lock = [[NSLock alloc] init];
//加锁
[lock lock];
//解锁
 [lock unlock];
  • pthread_mutex_t(rescurisive)
pthread_mutex_t mutex_t;
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&mutex_t, &attr);
//加锁
 pthread_mutex_lock(&mutex_t);
//解锁
  pthread_mutex_unlock(&mutex_t);
  • NSRecursiveLock
NSRecursiveLock *rescurisivelock = [[NSRecursiveLock alloc] init];
//加锁
[rescurisivelock lock];
//解锁
 [rescurisivelock unlock];
  • NSConditionLock
NSConditionLock *conditionlock = [[NSConditionLock alloc] init];
//加锁
[conditionlock lock];
//解锁
 [conditionlock unlock];
  • @synchronized
@synchronized (condition) {
            
  }

NSRecursiveLock和pthread_mutex_t(rescurisive)是自旋锁,其他都是互斥锁。由于OSSpinLock因优先级反转的问题,已经不安全,所以不介绍了。

由于高级锁(NSLock等对象锁)是基于pthread_mutex_t定制,性能方面会有丢失,推荐使用pthread_mutex或者dispatch_semaphore。

相关文章

  • OC--各种线程锁

    参考:正确使用多线程同步锁@synchronized()iOS中的锁iOS多线程安全详解iOS 常见知识点(三):...

  • iOS-锁-@synchronized

    @synchronized,同步锁,又名对象锁,由于其使用简单,基本上是在iOS开发中使用最频繁的锁。 使用方式如...

  • iOS中使用到的加锁方案

    前言 iOS中使用到的锁有哪些? OSSpinLock自旋锁 os_unfair_lock互斥锁 pthread_...

  • iOS 锁的使用

    参考 demo 参考的文章:iOS开发中的11种锁以及性能对比多线程-线程安全 结论: 自旋锁性能 > 信号量 >...

  • iOS 锁的使用

    简介 自旋锁:在访问被锁资源时,调用者线程不会休眠,而是不停循环在那里,直到被锁资源释放锁。互斥锁:在访问被锁资源...

  • iOS锁系列-目录

    1、 iOS锁系列-NSLock对象锁2、iOS锁系列-NSConditionLock条件锁3、iOS锁系列-NS...

  • 谈下Objective C都有哪些锁机制,你一般用哪个?

    原文:iOS面试题大全 1)NSLock iOS中对于资源抢占的问题可以使用同步锁NSLock来解决,使用时把需要...

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

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

  • iOS锁的基本使用

    @synchronized dispatch_semaphore dispatch_semaphore_wait ...

  • iOS 线程锁的使用

    一、线程锁相关概念 线程锁:我们在使用多线程的时候多个线程可能会访问同一块资源,这样就很容易引发数据错乱和数据安全...

网友评论

      本文标题:iOS 锁的使用

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