Swift队列/并发和锁定

时间:2016-11-14 23:35:50

标签: swift multithreading concurrency thread-safety semaphore

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

有任何优点/缺点吗?我相信只使用串行队列会正确地阻塞资源而不会浪费信号量的时间。

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

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

1 个答案:

答案 0 :(得分:2)

带有信号量的并发队列可以让您更加详细地了解需要锁定的条件。您可以将大多数功能并行执行,只有互斥区域(关键区域)需要锁定。

但是,对于将关键区域分派到串行队列的并发队列,可以同样模拟这一点,以确保互斥。

  

我相信只使用串行队列会正确地阻塞资源,而不会浪费信号量的时间。

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

  

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

都能跟得上