pthread的(POSIX线程)在Visual Studio 2010 [英] pthread ( POSIX Threads) in visual studio 2010

查看:98
本文介绍了pthread的(POSIX线程)在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆