【问题标题】:Swift Queues/Concurrency and LockingSwift 队列/并发和锁定
【发布时间】:2017-03-28 17:37:54
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: swift multithreading concurrency thread-safety semaphore


    【解决方案1】:

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

    但是,这可以通过并发队列进行同等模拟,其关键区域被分派到串行队列,以确保互斥。

    我相信仅使用串行队列就可以正确地阻塞资源,而不会浪费时间用于信号量。

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

    使用没有信号量的并发队列是不安全的,对吧?

    没有

    【讨论】:

    • 非常感谢您的洞察力! :)
    猜你喜欢
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2014-12-25
    • 2017-04-21
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多