swift - 基于 QOS 的 DispatchSemaphore 是否阻塞了整个线程池
问题描述
let semaphore = DispatchSemaphore(value: 1)
DispatchQueue.global(qos: .background)
这是否意味着如果我使用这个信号量来使一个特定的资源块一次只能由一个线程访问,它将阻塞在后台运行的整个线程(或)只阻塞需要资源的线程
解决方案
它只会阻塞需要已分配资源的线程。每当一个线程调用时,
@discardableResult func signal() -> Int
信号量计数增加 1,并且该线程被授予访问临界区的权限。如果即将到来的线程调用相同的方法,它将被阻塞,直到第一个线程调用
func wait()
方法。
推荐阅读
- pandas - 将 pandas 数据帧逻辑转换为基于 pyspark 数据帧的逻辑
- swift - 如何停止自动重新加载firebase
- django - 如何在模板表单循环中排除特定字段类型
- mysql - 在特定字符之后清除左边的 14 个字符和右边的“x”
- kotlin - Dynamic/Sectioned RecyclerView, Room 和 Single Data Class
- grafana - 我应该如何让 grafana 知道安装在不同主机上的 telegraf 和 influxdb?
- linux - 在 bash 中 2 个日期之间的 bash 差异 by yyyy-mm-dd 在 N 天内
- reactjs - 我想将复选框数据存储到功能状态挂钩中但无法执行
- python - 如何调试无响应、模糊不清的 Werkzeug 404 错误?
- memory-leaks - 如何检查之前是否运行过子程序?