gpt4 book ai didi

Swift 队列/并发和锁定

转载 作者:搜寻专家 更新时间:2023-11-01 07:18:20 25 4
gpt4 key购买 nike

我通常使用串行队列作为一种锁定机制,以确保一个资源可以被多个不同的线程访问而不会出现问题。但是,我见过其他开发人员使用带信号量甚至不带信号量的并发队列的情况(看到 Linux 上的 IBM/Swift 使用带信号量的并发队列)。

有什么优点/缺点吗?我相信仅使用串行队列就可以正确地阻塞资源,而不会浪费时间用于信号量。

另一方面,当 cpu 繁忙时会发生什么?如果我没记错的话,串行队列不一定在同一个线程/同一个 cpu 上执行,对吧?

这是我能想到的唯一解释;并发队列将能够在所有可用线程/CPU 上共享工作负载,确保通过信号量进行线程安全访问。使用没有信号量的并发队列是不安全的,对吧?

最佳答案

带有信号量的并发队列让您可以更精细地确定哪些条件需要锁定。您可以让大部分功能并行执行,只有互斥区域(临界区域)需要锁定。

然而,这同样可以用并发队列模拟,其关键区域被分派(dispatch)到串行队列,以确保互斥。

I would believe that just using serial queues would correctly block the resource without wasting time for semaphores.

串行队列也需要信号量,因为队列的变化必须同步。但是,它将它藏在地毯下,并保护您免受与手动信号量使用相关的许多容易犯的错误。

Using a concurrent queue without a semaphore would not be safe, right?

没有

关于Swift 队列/并发和锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40599660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com