GCD信号量的理解和简单的应用(异步等待,结合group实现多个任务的并发和依赖)(swift)

1.理解:DispatchSemaphore,就是一个信号量,这个信号量就相当于一个互斥资源,用来控制异步线程之间的互相等待,达到线程锁的功能,与一般的互斥锁不同,互斥锁是锁住某段代码或资源,保证资源的安全访问。而信号量以自身为资源,达到控制线程相互依赖关系。

2.应用1:异步任务的等待。创建一个value为0的信号量,当任务执行完成后,通过signal方法增加1,在主线程或者其他地方通过wait函数等待并进入其他任务。

        do {
            let queue = DispatchQueue.global()
            let sema = DispatchSemaphore.init(value: 0)
            queue.async {
                //执行异步任务
                sleep(10)
                print("10完成")
                
                sema.signal()
            }
            
            _ = sema.wait(timeout: DispatchTime.distantFuture)
            print("进入主线程下个任务,会卡死主线程")
        }

3.应用2:通过group 控制多个线程任务之间的依赖关系。

        //1.group中控制依赖管理,1,2,3三个异步操作需要完成之后才能刷新UI,enter 和 leave控制group中所有操作是否完成。
        let queue
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值