多线程

作者: _风雨 | 来源:发表于2021-10-21 11:41 被阅读0次

异步网络请求串行

let group = DispatchGroup()
//    let queue = DispatchQueue(label: "current", attributes: .concurrent)
    let queue = DispatchQueue(label: "current")
    let sema = DispatchSemaphore(value: 0)

func test() {
        queue.async(group: group) {
            DispatchQueue.delay(2) {
                print("1")
                self.sema.signal()
            }
            print("1 ----")
            
            _ = self.sema.wait(timeout: .distantFuture)
        }
        
        queue.async(group: group) {
            DispatchQueue.delay(1) {
                print("2")
                self.sema.signal()
            }
            print("2 ----")
            
            _ = self.sema.wait(timeout: .distantFuture)
        }
        
        
        queue.async(group: group) {
            DispatchQueue.delay(2) {
                print("3")
                self.sema.signal()
            }
            print("3 ----")
            
            _ = self.sema.wait(timeout: .distantFuture)
        }
        
        group.notify(queue: queue) {
            print("finish")
        }
    }

DispatchSemaphore初始值为1

let group = DispatchGroup()
    let queue = DispatchQueue(label: "current")
    let sema = DispatchSemaphore(value: 1)

func test() {
        
        queue.async(group: group) {
            _ = self.sema.wait(timeout: .distantFuture)
            
            DispatchQueue.delay(2) {
                print("1")
                self.sema.signal()
            }
            print("1 ----")
        }

        
        
        queue.async(group: group) {
            _ = self.sema.wait(timeout: .distantFuture)
            
            DispatchQueue.delay(1) {
                print("2")
                self.sema.signal()
            }
            print("2 ----")
        }

        
        queue.async(group: group) {
            _ = self.sema.wait(timeout: .distantFuture)
            
            DispatchQueue.delay(2) {
                print("3")
                self.sema.signal()
            }
            print("3 ----")
        }

        group.notify(queue: queue) {
            _ = self.sema.wait(timeout: .distantFuture)
            
            print("finish")
        }
    }

DispatchSemaphore初始值为0还是1,看个人需求和习惯吧

相关文章

  • iOS多线程 NSOperation

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程 pthread、NSThread

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程: GCD

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程运用

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程基础

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • 多线程介绍

    一、进程与线程 进程介绍 线程介绍 线程的串行 二、多线程 多线程介绍 多线程原理 多线程的优缺点 多线程优点: ...

  • iOS进阶之多线程管理(GCD、RunLoop、pthread、

    深入理解RunLoopiOS多线程--彻底学会多线程之『GCD』iOS多线程--彻底学会多线程之『pthread、...

  • iOS多线程相关面试题

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • 多线程之--NSOperation

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • iOS多线程之--NSThread

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

网友评论

      本文标题:多线程

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