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