(栅栏函数)是 GCD(Grand Central Dispatch)中用于解决多线程并发读写安全问题的一个非常强大的工具。 简单来说,它就像一个交通管制的“栅栏”或“路障”,用来控制任务在并发队列中的执行顺序。 以下是关于它的详细解析: 1. 核心作用 在并发队列(Concurrent Queue)中,任务通常是并发执行的(乱序、同时进行)。 的作用是将队列中的任务在时间线上切分为三部分: 1. 栅栏前的任务:在栅栏任务加入队列之前提交的任务,会照常并发执行。 2. 栅栏任务本身:当栅栏前的所有任务都执行完毕后,单独、排他地执行栅栏任务(此时队列暂时变成了串行)。 3. 栅栏后的任务:只有当栅栏任务执行完毕后,后续提交的任务才会开始并发执行。 一句话总结: 它保证了在它执行的时候,队列中没有其他任务在执行(既没有读,也没有写)。 --- 2. 执行流程图解 假设有一个并发队列,我们依次提交了任务:, , , , , 。 执行流程如下: 1. , , 并发执行(互不影响)。 2. 等待 , , 全部结束。 3. 独占执行 任务(此时 , 处于等待状态)。 4. 结束。 5. , ...