Почему функция потока Linux работает в Windows? - PullRequest
3 голосов
/ 26 ноября 2011

Я компилирую эту программу с помощью gcc из пакета cygwin на моем компьютере с Windows

#include<stdio.h>
#include<pthread.h>

void* thread_function(void)
{
    printf("hello");
}
int main(int argc,char *argv[])
{
    pthread_t thread_id[argc-1];
    int i;
    int status;
    printf("argc is %d ",argc-1);
    for(i=0;i<argc-1;i++)
    {
        pthread_create (&thread_id[i], NULL , &thread_function, NULL);
    }  

    for(i=0;i<argc-1;i++)
        pthread_join(thread_id[i],NULL);   
}

Компилирует и создает a.exe

Когда я запускаю его в cmd

./a.exe 2 3

Выход

argc is 2 hellohello

Question :

pthread.h и эта функция потока связаны с linux os, тогда почему она работает с windows?

Ответы [ 2 ]

12 голосов
/ 26 ноября 2011

Это не «потоки Linux», это P OSIX thread s. Cygwin предоставляет уровень совместимости POSIX, включая pthread.h.

5 голосов
/ 26 ноября 2011

Помимо pthread.h, cygwin - это полностью unix-подобная среда, в основном основанная на утилитах gnu, с некоторыми компонентами Solaris.

Вы можете компилировать и использовать программное обеспечение unix в среде cygwin, но вы не можете распространять свой exe-файл просто так. На каждой машине с Windows нужно было бы установить и настроить среду Cigwin.

Приложения Cygwin не являются на 100% эффективными или надежными в среде Windows из-за различий в дизайне ОС. Так же, как приложения для Windows не на 100% надежны и не эффективны при использовании Wine, хотя приложения Cygwin изначально компилируются в Windows.

Другие среды / библиотеки / компиляторы также предоставляют способы использования функций posix. Одним из наиболее успешных является Mingw, который предоставляет библиотеки, реализованные поверх вызовов win32, и не нуждается в дополнительной среде.

Кроме того, приложения Cygwin должны соответствовать условиям GPL2, поэтому вы должны отдавать свой исходный код вместе с приложением при использовании скомпилированных двоичных файлов cygwin, библиотеки времени выполнения Mingw официально находятся в открытом доступе, поэтому вы можете сохранить свой исходный код себе, если хочешь.

http://www.mingw.org/
http://en.wikipedia.org/wiki/MinGW
http://en.wikipedia.org/wiki/Cygwin

...