- 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,就能避免另一个窗口卖票!!
网友评论