Недавно изучив Grand Central Dispatch, я обнаружил, что многопоточный код довольно интуитивно понятен (с GCD). Мне нравится тот факт, что никаких блокировок не требуется (и тот факт, что он использует внутренние структуры данных без блокировки) и что API очень прост.
Сейчас я начинаю изучать потоки pthread, и я не могу не быть немного ошеломлен их сложностью. Соединения потоков, мьютексы, условные переменные - все это не обязательно в GCD, но имеет много вызовов API в pthreads.
Имеют ли pthreads какие-либо преимущества перед GCD? Это более эффективно? Существуют ли обычные варианты использования, когда потоки pthread могут делать то, что не может делать GCD (за исключением программного обеспечения уровня ядра)?
Что касается кроссплатформенной совместимости, меня это не особо беспокоит. В конце концов, libdispatch имеет открытый исходный код, Apple внесла свои изменения закрытия в качестве исправлений в GCC, clang поддерживает закрытие, и уже (например, FreeBSD) мы начинаем видеть некоторые реализации GCD, не принадлежащие Apple. Меня больше всего интересует использование API (конкретные примеры были бы отличными!).