В разделе "Миграция с потоками" руководства по программированию Apple Concurrency есть Изменение производителей-потребителей, в котором утверждается, что типичная многоступенчатая реализация переменных переменных mutex + pthread может быть упрощена с использованием GCD.
С очередями отправки вы можете упростить производителя и потребителя реализации в один вызов:
dispatch_async(queue, ^{
// Process a work item.
});
Когда ваш продюсер должен выполнить работу, все, что ему нужно сделать, это добавить эту работу в очередь и позволить очереди обрабатывать элемент.
Проблема "Продюсер-потребитель" также известна как проблема Bounded-Buffer, но в приведенном выше описании не упоминается буфер, его привязка или потребитель, не говоря уже о блокировании производителя и потребителя, чтобы избежать превышения/под управлением.
Как это может быть правильным решением?