DispatchWorkItemFlags.barrier

1.异步方式执行

import UIKit

class ViewController: UIViewController {

    let queue = DispatchQueue(label: "TestQueue", attributes: DispatchQueue.Attributes.concurrent)
    
    override func viewDidLoad() {
        super.viewDidLoad()
       
        
        queue.async {
            for _ in 0..<10 {
                print("A------async -- \(Thread.current)")
            }
        }
        
        queue.async {
            for _ in 0..<10 {
                print("B------async -- \(Thread.current)")
            }
        }

        在异步方式下的执行  
        queue.async(flags: .barrier) {
            for _ in 0..<10 {
                print("C------async -- \(Thread.current)")
            }
        }
        queue.async {
            for _ in 0..<10 {
                print("D------async -- \(Thread.current)")
            }
        }
        queue.async {
            for _ in 0..<10 {
                print("E------async -- \(Thread.current)")
            }
        }
        
    }
}

执行结果:

B------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
A------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
A------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
A------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
A------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
B------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
A------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
A------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
B------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
A------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
A------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
A------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
A------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
C------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
C------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
C------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
C------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
C------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
C------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
C------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
C------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
C------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
C------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
D------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
D------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
D------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
E------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
E------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
E------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
E------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
E------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
E------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
E------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600003180300>{number = 4, name = (null)}
E------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
E------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
E------async -- <NSThread: 0x6000031802c0>{number = 3, name = (null)}
image.png

2.同步方式执行

import UIKit

class ViewController: UIViewController {

    let queue = DispatchQueue(label: "TestQueue", attributes: DispatchQueue.Attributes.concurrent)
    
    override func viewDidLoad() {
        super.viewDidLoad()
       
        
        queue.async {
            for _ in 0..<10 {
                print("A------async -- \(Thread.current)")
            }
        }
        
        queue.async {
            for _ in 0..<10 {
                print("B------async -- \(Thread.current)")
            }
        }
      // 同步执行
        queue.sync(flags: .barrier) {
            for _ in 0..<10 {
                print("C------sync -- \(Thread.current)")
            }
        }
        queue.async {
            for _ in 0..<10 {
                print("D------async -- \(Thread.current)")
            }
        }
        queue.async {
            for _ in 0..<10 {
                print("E------async -- \(Thread.current)")
            }
        }
        
    }
}

执行结果


A------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
A------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
A------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
A------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
A------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
A------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
A------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
A------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
A------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
A------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
B------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
B------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
B------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
B------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
C------sync -- <NSThread: 0x600002b75a00>{number = 1, name = main}
C------sync -- <NSThread: 0x600002b75a00>{number = 1, name = main}
C------sync -- <NSThread: 0x600002b75a00>{number = 1, name = main}
C------sync -- <NSThread: 0x600002b75a00>{number = 1, name = main}
C------sync -- <NSThread: 0x600002b75a00>{number = 1, name = main}
C------sync -- <NSThread: 0x600002b75a00>{number = 1, name = main}
C------sync -- <NSThread: 0x600002b75a00>{number = 1, name = main}
C------sync -- <NSThread: 0x600002b75a00>{number = 1, name = main}
C------sync -- <NSThread: 0x600002b75a00>{number = 1, name = main}
C------sync -- <NSThread: 0x600002b75a00>{number = 1, name = main}
D------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
E------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
E------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
E------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
E------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
E------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
E------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
E------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
E------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
E------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
E------async -- <NSThread: 0x600002b298c0>{number = 3, name = (null)}
D------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
D------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}
D------async -- <NSThread: 0x600002b23100>{number = 4, name = (null)}

image.png

You can read about them in the dispatch_block_flags_t manual:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者: 缪玉 恐惧,似乎是与生俱来的!仿佛我们从一出生就开始了各种各样的恐惧,对于饥饿的恐惧,对于呼...
    丽萍心理工作室阅读 649评论 0 0
  • 01 苏丹薇浑身微颤,右手覆在鼠标上,手指僵硬,不听使唤。终于再次打开公司群发的邮件,升职名单里副主编一栏赫然写着...
    芳踪阅读 550评论 0 17
  • 在这个移动互联网流量红利不再持续情况下,就连线下流量都处于火热争夺中,更需要通过精细化运营来实现产品增长目标的时代...
    steve雨辰阅读 521评论 0 1