关于C#:为什么linux线程功能在Windows中工作?

Why does a linux thread function work in windows?

我正在Windows机器上使用cygwin包中的gcc编译该程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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);  
}

它编译并创建一个.exe

当我在cmd中运行它

1
./a.exe 2 3

输出为

1
2
3
argc is 2 hellohello

Question :

pthread.h和此线程函数与linux os有关,那么为什么它可以与Windows一起使用?


它们不是" Linux线程",而是P?OSIX线程。 Cygwin提供了POSIX兼容层,包括pthread.h


除pthread.h之外,cygwin是整个unix式的环境,主要基于gnu实用程序,也包含一些solaris的东西。

您可以在cygwin环境中编译和使用UNIX软件,但不能像这样分发exe文件。每台Windows机器都需要安装并配置一个cigwin环境。

由于操作系统设计上的差异,Cygwin应用程序在Windows环境上并非100%高效或可靠。就像Windows应用程序在使用Wine时并非100%可靠或高效一样,尽管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