swift semaphore信号量

2020-07-17  本文已影响0人  松龄学编程
let queue = DispatchQueue(label: "com.sfit.demo")
        let sema = DispatchSemaphore(value: 1)
        
        queue.async {
            Thread.sleep(forTimeInterval: 0.4)
            print("task1 done")
            let sign = sema.signal()
            print("sign: \(sign)")
        }
        var result = sema.wait(timeout: .distantFuture)
        print(result)
        
        queue.async {
            
            Thread.sleep(forTimeInterval: 0.2)
            print("task2 done")
            let sign = sema.signal()
            print("sign: \(sign)")
        }
        result = sema.wait(timeout: .distantFuture)
        print(result)

信号量是可以用来阻塞当前线程,设置value不同,可以有多种使用场景。
1 value为0,阻塞当前线程,线程等待
2.value为1,当成锁来使用,串行执行
3.value大于1,限制线程生成数量

上一篇 下一篇

猜你喜欢

热点阅读