Безопасно ли планировать блоки в главном DispatchQueue одновременно из параллельных потоков? - PullRequest
0 голосов
/ 26 октября 2019

В своем коде я использую цикл for для отправки параллельных задач в глобальную очередь отправки, например:

for collectionMember in myCollection {
    DispatchQueue.global(qos: .default).async {

        // do stuff here with collectionMember and store in variable "result"

        DispatchQueue.main.async {
            // code using variable "result" that must be executed serially on main thread
            // because accesses shared resources
        }
}

Я новичок во всем, что касается Grand Central Dispatch, и я беспокоюсьчто, когда разные параллельные потоки пытаются планировать блоки в главном DispatchQueue, будут некоторые проблемы с памятью, поскольку они оба обращаются к главному DispatchQueue.

Я хочу, чтобы параллельные потоки добавили блок восновное DispatchQueue по их завершению, без проблем с безопасностью потоков.

Нужно ли использовать блокировку вокруг блока, куда я отправляю код в главное DispatchQueue, или планирование потока блоков безопасно?

Наконец, если у меня есть какие-либо ошибки или есть более простой способ решить эту проблему, дайте мне знать. Спасибо!

1 Ответ

1 голос
/ 26 октября 2019

Нет необходимости в замках. Основная очередь - это блокировка! Вот и весь смысл (ну, много смысла). Это последовательная очередь;ничто не может начать выполняться в главной очереди, если что-то еще уже выполняется. В основном потоке нет параллелизма. То, что вы делаете, совершенно правильно;просто знайте, что вы можете выстраивать целую кучу блоков для выполнения в главном потоке, по одному за раз. Но это не проблема, если здесь не чертовски много из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...