Могу ли я получить pthread.h из Unix для компиляции в Windows? - PullRequest
52 голосов
/ 28 января 2010

Если я пытаюсь скомпилировать программу с

#include <pthread.h>

в нем я получаю ошибку:

pthread.h: No such file or directory

Можно ли заставить это скомпилировать в среде Windows?

Я использую Vista с последней версией MinGW.

Я не хочу использовать Microsoft Windows Services для UNIX версии 3.5, так как мне придется переместить это в среду Unix.

Ответы [ 5 ]

46 голосов
/ 28 января 2010

pthread.h - заголовок для Unix / Linux (POSIX) API для потоков. Слой POSIX, такой как Cygwin, вероятно, скомпилирует приложение с #include <pthreads.h>.

Нативный API-интерфейс потоков Windows предоставляется через #include <windows.h>, и он немного отличается от потоков в Linux.

Тем не менее, есть заменяющая библиотека "клей", поддерживаемая в http://sourceware.org/pthreads-win32/; обратите внимание, что у него есть небольшая несовместимость с MinGW / VS (например, см. здесь ).

16 голосов
/ 28 января 2010

Как уже упоминалось @Ninefingers, pthreads только для Unix. Только Posix, правда.

Тем не менее, у Microsoft есть библиотека, которая дублирует pthreads:

Службы Microsoft Windows для UNIX версии 3.5

Библиотека Скачать

11 голосов
/ 21 августа 2013

pthread.h не в Windows. Но Windows имеет расширенную функциональность потоков, начиная с CreateThread .

Мой совет: не попадитесь на WinAPI через призму API другой системы. Эти системы отличаются . Это все равно что настаивать на том, чтобы ездить на велосипеде Win32 с удобным сиденьем для велосипеда в Linux. Ну, сиденье может не подходить, а в некоторых случаях оно просто упадет.

Потоки почти одинаково работают в разных системах, у вас есть ThreadPools и мьютексы . Работая как с потоками pthreads, так и с потоками Windows, я могу сказать, что многопоточность Windows предлагает гораздо больше функциональных возможностей, чем pthread.

Изучить другой API довольно просто, просто подумайте о понятиях (мьютекс и т. Д.), А затем посмотрите, как создать один из них в MSDN.

4 голосов
/ 02 июня 2016

Просто возьмите пакет TDM-GCC 64x. (Он содержит как 32-, так и 64-битные версии набора инструментов MinGW и входит в состав аккуратного установщика.) Более того, он содержит нечто, называемое библиотекой " winpthread ".

Он состоит из заголовка pthread.h, статических библиотек libwinpthread.a, libwinpthread.dll.a для 32-разрядных и 64-разрядных и необходимых .dll libwinpthread-1.dll и libwinpthread_64-1.dll (по состоянию на 01-06 -2016).

Вам потребуется подключиться к библиотеке libwinpthread.a во время сборки. Кроме этого, ваш код может быть таким же, как и для собственного кода Pthread в Linux. До сих пор я успешно использовал его для компиляции нескольких основных программ Pthread в 64-битной среде Windows.

В качестве альтернативы вы можете использовать следующую библиотеку, которая оборачивает Windows Threading API в API pthreads: Pthreads-win32 .

Вышеуказанные два являются наиболее известными способами для этого.

Надеюсь, это поможет.

3 голосов
/ 28 января 2010

Насколько я помню, есть два дистрибутива набора инструментов gnu для windows: mingw и cygwin.

Я бы ожидал, что Cygwin будет работать - было приложено много усилий, чтобы сделать его "стандартным"окружение posix.

Инструментальная цепочка mingw использует msvcrt.dll для своей среды выполнения и, таким образом, вероятно, предоставит msvcrt "thread" api: _beginthread , который определен в <process.h>

...