美文网首页iOS开发
GCD 让线程同步

GCD 让线程同步

作者: 神奇李白 | 来源:发表于2020-06-08 19:57 被阅读0次
  • 1.dispatch_group 调度组
  • 2.dispatch_barrier 栅栏块
  • 3.dispatch_semaphore 信号量

dispatch_group 线程组

-分别执行2个耗时的异步操作,等2个异步操作都执行完毕后在回到主线程执行操作,比如下载文件
-关键代码:
1.dispatch_group_notify任务执行完后的通知
2.dispatch_group_wait阻塞当前线程,等上面任务全部执行完后,才会继续
3.dispatch_group_enter 相当于 group 中未执行完毕任务数 +1
4.dispatch_group_leave 相当于 group 中未执行完毕任务数 -1

dispatch_barrier 栅栏快

-在两个操作组间形成栅栏,第一组操作执行完之后,才能开始执行第二组操作
-关键代码:dispatch_barrier_async

dispatch_semaphore信号量

-计数小于 0 时等待,不可通过。计数为 0 或大于 0 时,计数减 1 且不等待,可通过
Eg:异步执行 将 任务 1 追加到队列之后,不做等待,接着执行 dispatch_semaphore_wait 方法,semaphore 减 1,成为-1,进入等待状态。等任务1执行完并dispatch_semaphore_signal信号量+1后,等待中的线程才会继续执行
-关键代码:
1.dispatch_semaphore_create:创建一个 Semaphore 并初始化信号的总量
2.dispatch_semaphore_signal:发送一个信号,让信号总量加 1
3.dispatch_semaphore_wait:可以使总信号量减 1,信号总量小于 0 时就会一直等待(阻塞所在线程),否则就可以正常执行。

Dispatch Semaphore 线程安全和线程同步(为线程加锁)
eg:两个窗口同时出售去成都的票,卖完为止
方法:某个窗口卖的时候,信号量-1,卖出去后信号量+1,信号总量小于0,就能避免另一个窗口卖票!!

相关文章

  • 多线程相关面试问题

    多线程:GCD、NSOperation、NSThread。 一、GCD 1、同步/异步 和 串行/并发(1)、同步...

  • GCD 让线程同步

    1.dispatch_group 调度组2.dispatch_barrier 栅栏块3.dispatch_sema...

  • iOS面试之多线程模块

    多线程 多线程内容如下: GCD NSOperation NSThread 多线程与锁 1.GCD 同步/异步和串...

  • GCD中的串行,并行,同步,异步详解

    gcd中的串行,并行,同步,异步详解 1、gcd中同步与异步的区别: gcd中的线程是由一个线程池来管理的,这个池...

  • [iOS面试]第6章 多线程相关面试问题

    本文主讲多线程相关面试问题:包括GCD、NSOperation、NSThread、多线程与锁。 一、GCD 同步/...

  • iOS面试 -- 多线程相关

    多线程技术方案 GCD NSOperation NSThread GCD 同步/异步 和串行/并发 dispatc...

  • iOS gcd看我就够了

    gcd是iOS中多线程的一种技术,下面我们来看看gcd的用法 同步&异步 同步 同步执行:字面意思,同步执行就是执...

  • iOS之GCD学习心得

    1.GCD简介 gcd有两大概念:任务和队列(1) 任务:同步任务和异步任务。同步任务:不会开辟线程,在当前线程执...

  • 多线程

    iOS中的几种多线程GCD1、GCD分为任务和队列,任务(同步,异步)队列(串行,并发),同步串行,同步主队列的情...

  • 多线程

    GCD NSOperation NSThread 多线程与锁 一、GCD 同步、异步 和 串行、并发 dispat...

网友评论

    本文标题:GCD 让线程同步

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