美文网首页
iOS八大锁

iOS八大锁

作者: 程序员进阶 | 来源:发表于2021-10-27 10:18 被阅读0次

锁是最常用的同步工具。
一段代码段在同一个时间只能允许被有限个线程访问,比如一个线程 A 进入需要保护代码之前添加简单的互斥锁,另一个线程 B 就无法访问,只有等待前一个线程 A 执行完被保护的代码后解锁,B 线程才能访问被保护代码。
八大锁如下:
NSLock、NSConditionLock、NSRecursiveLock、NSCondition、
@synchronized、dispatch_semaphore、OSSpinLock、pthread_mutex

1、NSLock

2、NSConditionLock

3、NSRecursiveLock

4、NSCondition

5、@synchronized

6、信号量(dispatch_semaphore)

  1. // 创建一个信号,value:信号量
    dispatch_semaphore_create(<#long value#>)
  2. // 使某个信号的信号量+1
    dispatch_semaphore_signal(<#dispatch_semaphore_t dsema#>)
  3. // 线程执行dispatch_semaphore_wait时,会获取当前信号量,将信号量值减一,如果信号量值小于0,则等待dispatch_semaphore_signal唤醒线程;如果信号量值大于或等于0则开始执行任务
    dispatch_semaphore_wait(<#dispatch_semaphore_t dsema#>, <#dispatch_time_t timeout#>)
  4. 正常的使用顺序是先降低然后再提高,这两个函数通常成对使用。
//初始化信号量,初始值N = 2,表示最多只允许两条线程同时获得信号量
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(2);
    // 并发队列
    dispatch_queue_t conQueue = dispatch_queue_create("com.hello-world.djx", DISPATCH_QUEUE_CONCURRENT);
    for (int i = 1; i <= 5; i++) {
        dispatch_async(conQueue, ^{
          // 线程执行dispatch_semaphore_wait时,会获取当前信号量,将信号量值减一,如果信号量值小于0,则等待dispatch_semaphore_signal唤醒线程;如果信号量值大于或等于0则开始执行任务
            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
            NSLog(@"开始任务:%d", i);
            sleep(i);
            NSLog(@"结束任务:%d", i);
            //线程执行完任务之后调用dispatch_semaphore_signal,将信号量值加一,如果此时信号量值大于0,说明没有等待的线程,直接返回,如果此时信号量值小于或等于0,表次此前信号量已用尽,可能有正等待的线程,这时候会试图唤起等待的线程
            dispatch_semaphore_signal(semaphore);
        });
    }

7、OSSpinLock

8、pthread_mutex

相关文章

  • OC底层探索24-synchronize锁的原理

    1、八大锁效率 八大锁分别:自璇所:OSSpinLock。在iOS10以后该锁被重写,会在堵塞时进行休眠;互斥锁:...

  • iOS 八大锁

    收录:原文地址 锁是最常用的同步工具。一段代码段在同一个时间只能允许被有限个线程访问,比如一个线程 A 进入需要保...

  • iOS八大锁

    锁是最常用的同步工具。一段代码段在同一个时间只能允许被有限个线程访问,比如一个线程 A 进入需要保护代码之前添加简...

  • iOS锁系列-目录

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

  • iOS 中的八大锁

    锁是最常用的同步工具。一段代码段在同一个时间只能允许被有限个线程访问,比如一个线程 A 进入需要保护代码之前添加简...

  • 起底多线程同步锁(iOS)

    起底多线程同步锁(iOS) 起底多线程同步锁(iOS)

  • iOS 中常见的几种锁-代码示例

    iOS 中常见的几种锁-代码示例 iOS 中常见的几种锁-代码示例

  • 浅谈iOS 中的八大锁

    锁是最常用的同步工具。一段代码段在同一个时间只能允许被有限个线程访问,比如一个线程 A 进入需要保护代码之前添加简...

  • iOS底层原理 - 八大锁分析

    回顾之前 前文讲到多线程原理,线程安全、线程阻塞、线程使用等;这节我们来分析一下有关线程安全的一部分:锁,线程锁。...

  • OC--各种线程锁

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

网友评论

      本文标题:iOS八大锁

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