pthread的(POSIX线程)在Visual Studio 2010 [英] pthread ( POSIX Threads) in visual studio 2010
问题描述
我发现从互联网上的Pthread程序,我想在Visual Studio 2010中运行它,但我不知道如何在Visual Studio中使用的pthread。下面是我发现的程序:
I have found a Pthread program from internet and i want to run it in visual studio 2010 but I dont know how can use pthread in visual studio. the following is the program which I found:
#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中运行它。我知道应该包含一些头,但我不知道该怎么做。
Can anybody tell me how to run it in visual studio. I know there should be included some header, but i dont know how to do it.
请让我知道,从开始到结束一步一步来。我在编程初学者请告诉我一步一步...
Please let me know from start until end step by step. I am a beginner in programming please tell me step by step...
推荐答案
现在,你有你的程序编译,需要在两个地方之一查找特定DLL(pthreadVC2.dll):
Now that you've got your program compiled, you need to locate the specific dll (pthreadVC2.dll) in one of two places:
- 1)同一个目录中的.exe文件位于
OR - 2)C:\\ Windows \\ System32下(如果你的操作系统是32位Windows版本)
OR - 2)C:\\ WINDOWS \\ Syswow64资料(如果你的操作系统是一个64位Windows版本)
说真的,C:\\ WINDOWS在上面的例子应该是你的Windows安装到实际的路径,有时这也被拼写为%WINDIR%\\ SYSTEM32或%WINDIR%\\ Syswow64资料
Really, the "C:\Windows" in the above examples should be the actual path your windows is installed to, sometimes this is spelled out as %windir%\system32 or %windir%\SysWOW64
这篇关于pthread的(POSIX线程)在Visual Studio 2010的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!