基于QOS的DispatchSemaphore是否会阻塞整个线程池

Does QOS based DispatchSemaphore blocks the entire thread pool

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

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

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

@discardableResult func signal() -> Int 

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

func wait()

方法。

信号量只是管理您要求它们执行的线程的管理器。所以,除非你在特定线程上调用信号量,否则线程与信号量无关。所以你不用担心其他线程被阻塞

如果信号量被占用,则下一个线程被设置为wait()并因此被冻结,直到它得到signal()。因此,不要打乱主线程 :-)