Предположим, у меня есть семафор для контроля доступа к dispatch_queue_t. Я жду семафора (dispatch_semaphore_wait) перед планированием блока в очереди отправки.приоритет управления с помощью семафора
dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER)
dispatch_async(queue){ //do work ; dispatch_semaphore_signal(semaphore); }
Предположим, у меня есть работа в нескольких отдельных местах. Некоторые «работы» имеют более высокий приоритет, чем другая «работа».
Есть ли способ контролировать, какая из «работ» будет запланирована следующая?
Дополнительная информация: использование серийной очереди без семафора не является для меня вариантом, поскольку «работа» состоит из собственной очереди с несколькими блоками. Вся рабочая очередь должна запускаться, или ни одна из них. Никакие рабочие очереди не могут выполняться одновременно. У меня все это работает отлично, за исключением контроля приоритета.
Edit: (в ответ на Джереми, переехал из комментариев)
Ок, предположим, что у вас есть устройство/файл/независимо от типа принтера. Задача печати состоит из нескольких вызовов/блоков функций (печатайте заголовок, затем печатайте рисунок, затем печатайте текст, ...), сгруппированные вместе в транзакции. Поместите эти блоки в последовательную очередь. Одна очередь за транзакцию.
Однако вы можете иметь несколько заданий/транзакций печати. Блоки из разных заданий/транзакций печати нельзя смешивать. Итак, как вы гарантируете, что очередь транзакций выполняет все свои задания и что очередь транзакций не запускается до того, как закончится другая очередь? (Я не печатаю, просто используя это в качестве примера).
Семафоры используются для регулирования использования конечных ресурсов. https://www.mikeash.com/pyblog/friday-qa-2009-09-25-gcd-practicum.html Concurrency Programming Guide
Следующим шагом я пытаюсь выяснить, как запустить одну транзакцию перед другим.
Выполнение одной транзакции перед другой - это именно то, для чего предназначены последовательные очереди. Вы должны сделать каждую транзакцию блоком в очереди. Отключите использование семафора, так как это может привести к инверсии приоритетов. –
ОК, я буду инвертировать приоритет google и пересмотреть. – user965972