美文网首页
iOS都有哪些锁

iOS都有哪些锁

作者: Li_Po | 来源:发表于2020-10-17 10:55 被阅读0次
  • iOS都有哪些锁:synchronized 、atomic、oSSpinLook、NSLock、dispatch_semaphore_t
  • synchronized

例如创建单例使用 + (instancetype)sharedInstance
{
static LockTest * shareLockTest = nil;
//锁
@synchronized (self) {//创建单例队形使用
if (!shareLockTest) {
shareLockTest = [[LockTest alloc] init];
}
}
return shareLockTest;
}
//扩展GCD创建单例
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
shareLockTest = [[self alloc] init];
});

  • atomic 修饰属性关键字,对被修饰对象进行原子操作(不负责使用)

例如:
@property (atomic,strong)NSMutableArray * array;
[NSMutableArray array] 安全的,
[array addObject:]是不安全

  • oSSpinLook 自旋锁,

SpinLook_t是“忙等”的锁。
循环等待访问(whele),不释放当前资源,用于轻量级数据访问
例如: int类型的引用计数加1减1操作

  • NSLock

[NSLock lock] [NSLock unlock] 重入会死锁 可以使用递归锁解决

*NSRecursiveLock 递归锁

[NSRecursiveLock lock] [NSRecursiveLock unlock]

  • dispatch_semaphore_t 信号量

1:dispatch_semaphore_create(0) => 创建一个信号量
内部结构体
struct semaphore{
int Value;//信号信号量
List <thresd>;线程列表
}
2: dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER) => 等待信号。信号量-1
{
S.value = S.value-1;
if S.value<0 then Block(S.list);//阻塞是一个主动行为 当信号量为0的时候主动阻塞
}
3: dispatch_semaphore_signal(semaphore) => 发送一个信号 信号量+1 唤醒
{
S.value = S.value+1;
if S.value<=0 then wakeup(S.list); //唤醒是一个被动行为 当有信号量的时候唤醒线程
}

iOS常用的十个锁示例

https://www.jianshu.com/p/33b608903488

相关文章

  • iOS都有哪些锁

    iOS都有哪些锁:synchronized 、atomic、oSSpinLook、NSLock、dispatch_...

  • iOS中使用到的加锁方案

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

  • iOS-锁

    iOS开发中知道的哪些锁? 哪个性能最差? 锁是线程编程同步工具的基础。iOS开发中常用的锁有如下几种: @syn...

  • iOS多线程

    iOS的锁机制?都有哪些锁?相同点:都能保证同一时间只有一个线程访问共享资源。都能保证线程安全。不同点:互斥锁:如...

  • iOS 锁上 synchronized

    iOS中有哪些锁呢? OSSpinLock,dispatch_semaphore_t,os_unfair_lock...

  • iOS底层探索之多线程(十三)—锁的种类你知多少?

    你用过哪些锁?对于锁的种类你了解多少?锁的原理知道否?从本篇博客开始将对锁的相关内容进行分析! iOS底层探索之多...

  • iOS锁系列-目录

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

  • iOS面试

    iOS面试题阿里、字节:一套高效的iOS面试题iOS源码分析 1、谈下iOS开发中知道的哪些锁? 哪个性能最差?S...

  • 4.多线程

    锁 ios当中有哪些锁? @synchronized一般在创建单例对象的时候使用 atomic修饰属性的关键字对被...

  • 你猜什么是iOS语言?

    iOS开发语言包括?iOS开发语言都有哪些?如何快速学习iOS入门语言? iOS开发语言主要包括:C语言基础、Ob...

网友评论

      本文标题:iOS都有哪些锁

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