Потоки POSIX против потоков Win32

Я просто окунул свои пальцы на носки в пруд POSIX и впервые попробовал потоки POSIX. До сих пор у меня создалось впечатление, что существует большое архитектурное различие между потоками POSIX и потоками Win32, но из (по общему признанию, мало), которые я пробовал, я действительно не видел разницы.

Мне все еще интересно, какие различия (если есть) между потоками POSIX и потоками Win32? Различаются ли они принципиально, или они просто имеют незначительные отличия?

Ответ 1

Существуют огромные различия между тем, как потоки управляются и планируются "под капотом" в ядрах семейства Windows NT и во многих ядрах Unix, но это не вопрос.

Если вы просто говорите о интерфейсе (сервисах, подверженных потокам Win32 и потоках POSIX), с некоторой работой вы можете почти сопоставить любую функцию потока POSIX с эквивалентом Win32 ~ 1:1, И это было сделано (см. Pthreads-win32).

Одна большая разница, которую я могу заметить, заключается в том, что в Win32 вы используете фактические системные вызовы для работы с потоками, а вызовы потоков POSIX являются частью библиотеки (pthreads), что - во многих системах Unix - вызывает некоторые очень низкие системные вызовы ядер Unix (под Linux там clone()).

Просто, чтобы доказать вам, что, если вы не сделаете очень глубокое, pthreads не является чем-то особенным, вы можете скачать pthreads-win32, который предоставляет совершенно тот же интерфейс pthreads, и любая функция отображается в API-интерфейсах потоков Win32. И это работает.