【发布时间】:2017-03-28 17:37:54
【问题描述】:
我通常使用串行队列作为一种锁定机制,以确保一个资源可以被许多不同的线程访问而不会出现问题。但是,我看到其他开发人员使用带有或什至不带有信号量的并发队列的情况(看到 Linux 上的 IBM/Swift 使用带有信号量的并发队列)。
有什么优点/缺点吗?我相信仅使用串行队列就可以正确地阻塞资源,而不会浪费时间用于信号量。
另一方面,当 cpu 忙时会发生什么?如果我没记错的话,串行队列不一定是在同一个线程/同一个cpu上执行的,对吧?
这是我能想到的唯一解释;并发队列将能够共享所有可用线程/cpu 上的工作负载,从而确保通过信号量进行线程安全访问。 使用没有信号量的并发队列是不安全的,对吧?
【问题讨论】:
标签: swift multithreading concurrency thread-safety semaphore