Последовательная очередь FIFO с использованием GCD
Я пытаюсь создать (сетевой) синхронизированный массив для компании, в которой я работаю. Хотя сетевая часть работает нормально, я столкнулся с проблемой.
Мое желание состояло в том, чтобы создать новую очередь, используяdispatch_create_queue
, к которому я бы добавил два блока, которыене работать в главном потоке, но в последовательном порядке, что означает, что сначала должен выполняться первый блок, затем второй, и никогда параллельно.
Я прочитал документацию по Apple, но, по меньшей мере, это сбивает с толку.
Когда я создаю свою очередь, используяdispatch_queue_create
а затем добавить блоки (после того, как они были определены), используяdispatch_sync
Я обнаружил, что блок все еще выполняется в основном потоке.
Когда используешьdispatch_async
, то есть когда блоки не выполняются в основном потоке.
Когда я пытаюсь добавить оба блока, используяdispatch_sync
Они заблокированы навсегда.
Единственный раз, когда оба блока работают нормально и выходят из основного потока, это когдаdispatch_async
.
Однако причина, по которой я выбрал GCD и метод синхронизации, заключалась в том, что у меня сложилось впечатление, что я создаю новую очередь (и, следовательно, новый поток) и что добавление блоков в эту очередь будет просто блокировать одну, пока другая не завершит выполнение. Разве это не так, или создание очереди не гарантирует, что код не будет выполняться в главном потоке?