Visual Studio 2010中的pthread(POSIX线程)

我从互联网上find了一个Pthread程序,我想在Visual Studio 2010中运行它,但是我不知道如何在Visual Studio中使用pthread。 以下是我find的程序:

#include <stdio.h> #include <stdlib.h> #define MAX_SIZE 4096 #define NO_PROCESS 8 typedef double matrix[MAX_SIZE][MAX_SIZE]; int N; /* matrix size */ int maxnum; /* max number of element*/ char *Init; /* matrix init type */ int PRINT; /* print switch */ matrix A; /* matrix A */ double b[MAX_SIZE]; /* vector b */ double y[MAX_SIZE]; /* vector y */ pthread_barrier_t barrier; /* forward declarations */ void work(void*); void Init_Matrix(void); void Print_Matrix(void); void Init_Default(void); int Read_Options(int, char **); int main(int argc, char **argv) { pthread_t threads[NO_PROCESS]; int timestart, timeend, iter; long i; Init_Default(); /* Init default values */ Read_Options(argc, argv); /* Read arguments */ Init_Matrix(); /* Init the matrix */ pthread_barrier_init(&barrier, NULL, NO_PROCESS); for (i = 0; i < NO_PROCESS; i++) pthread_create (&threads[i], NULL, (void *) &work, (void *) i); for (i = 0; i < NO_PROCESS; i++) pthread_join(threads[i], NULL); pthread_barrier_destroy(&barrier); if (PRINT == 1) Print_Matrix(); } void work(void *pId) { int i, j, k; long thread_id = (long)pId; /* Gaussian elimination algorithm */ for (k = 0; k < N; k++) { /* Outer loop */ if (thread_id == (k % NO_PROCESS)) { for (j = k + 1;(j < N); j++) A[k][j] = A[k][j] / A[k][k]; /* Division step */ y[k] = b[k] / A[k][k]; A[k][k] = 1.0; } pthread_barrier_wait(&barrier); /* wait for other threads finishing this round */ for (i = k + 1;(i < N); i++) { if (thread_id == (i % NO_PROCESS)) { for (j = k + 1;(j < N); j++) A[i][j] = A[i][j] - A[i][k] * A[k][j]; /* Elimination step */ b[i] = b[i] - A[i][k] * y[k]; A[i][k] = 0.0; } } pthread_barrier_wait(&barrier); /* wait for other threads finishing this round */ } } void Init_Matrix() { int i, j; printf("\nsize = %dx%d ", N, N); printf("\nmaxnum = %d \n", maxnum); printf("Init = %s \n", Init); printf("Initializing matrix..."); if (strcmp(Init, "rand") == 0) { for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (i == j) /* diagonal dominance */ A[i][j] = (double)(rand() % maxnum) + 5.0; else A[i][j] = (double)(rand() % maxnum) + 1.0; } } } if (strcmp(Init, "fast") == 0) { for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (i == j) /* diagonal dominance */ A[i][j] = 5.0; else A[i][j] = 2.0; } } } /* Initialize vectors b and y */ for (i = 0; i < N; i++) { b[i] = 2.0; y[i] = 1.0; } printf("done \n\n"); if (PRINT == 1) Print_Matrix(); } void Print_Matrix() { int i, j; printf("Matrix A:\n"); for (i = 0; i < N; i++) { printf("["); for (j = 0; j < N; j++) printf(" %5.2f,", A[i][j]); printf("]\n"); } printf("Vector b:\n["); for (j = 0; j < N; j++) printf(" %5.2f,", b[j]); printf("]\n"); printf("Vector y:\n["); for (j = 0; j < N; j++) printf(" %5.2f,", y[j]); printf("]\n"); printf("\n\n"); } void Init_Default() { N = 2048; Init = "rand"; maxnum = 15.0; PRINT = 0; } int Read_Options(int argc, char **argv) { char *prog; prog = *argv; while (++argv, --argc > 0) if (**argv == '-') switch ( *++*argv ) { case 'n': --argc; N = atoi(*++argv); break; case 'h': printf("\nHELP: try sor -u \n\n"); exit(0); break; case 'u': printf("\nUsage: sor [-n problemsize]\n"); printf(" [-D] show default values \n"); printf(" [-h] help \n"); printf(" [-I init_type] fast/rand \n"); printf(" [-m maxnum] max random no \n"); printf(" [-P print_switch] 0/1 \n"); exit(0); break; case 'D': printf("\nDefault: n = %d ", N); printf("\n Init = rand" ); printf("\n maxnum = 5 "); printf("\n P = 0 \n\n"); exit(0); break; case 'I': --argc; Init = *++argv; break; case 'm': --argc; maxnum = atoi(*++argv); break; case 'P': --argc; PRINT = atoi(*++argv); break; default: printf("%s: ignored option: -%s\n", prog, *argv); printf("HELP: try %s -u \n\n", prog); break; } } 

任何人都可以告诉我如何在Visual Studio中运行它。 我知道应该包括一些标题,但我不知道该怎么做。

请从开始到结束一步一步让我知道。 我是编程初学者,请一步步告诉我…

Solutions Collecting From Web of "Visual Studio 2010中的pthread(POSIX线程)"

http://sourceware.org/pthreads-win32/

上面的链接是用于Win32上的pthreads部分实现。 这有点旧,但应该做这个工作。

现在你已经编译了你的程序,你需要在两个地方之一找到特定的dll(pthreadVC2.dll):

  • 1)您的.exe文件位于相同的目录
    要么
  • 2)C:\ Windows \ system32(如果您的操作系统是32位Windows版本)
    要么
  • 2)C:\ Windows \ SysWOW64(如果你的操作系统是一个64位的Windows版本)

真的,在上面的例子中的“C:\ Windows”应该是你的Windows安装的实际路径,有时候这被拼写为%windir%\ system32或%windir%\ SysWOW64

在这里可以找到简短的描述(对于所有文件:* .h,* .lib,* .dll)。