首页 > 解决方案 > 基于 QOS 的 DispatchSemaphore 是否阻塞了整个线程池

问题描述

let semaphore = DispatchSemaphore(value: 1) 
DispatchQueue.global(qos: .background)

这是否意味着如果我使用这个信号量来使一个特定的资源块一次只能由一个线程访问,它将阻塞在后台运行的整个线程(或)只阻塞需要资源的线程

标签: swiftqosdispatchsemaphore

解决方案


它只会阻塞需要已分配资源的线程。每当一个线程调用时,

@discardableResult func signal() -> Int 

信号量计数增加 1,并且该线程被授予访问临界区的权限。如果即将到来的线程调用相同的方法,它将被阻塞,直到第一个线程调用

func wait()

方法。


推荐阅读