title: pthread ( POSIX Threads) in visual studio 2010
body: <p>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:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  
  #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(&amp;barrier, NULL, NO_PROCESS);
  
      for (i = 0; i &lt; NO_PROCESS; i++)
          pthread_create (&amp;threads[i], NULL, (void *) &amp;work, (void *) i);
  
      for (i = 0; i &lt; NO_PROCESS; i++)
          pthread_join(threads[i], NULL);
  
      pthread_barrier_destroy(&amp;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 &lt; N; k++)
      { /* Outer loop */
  
          if (thread_id == (k % NO_PROCESS))
          {
              for (j = k + 1;(j &lt; 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(&amp;barrier); /* wait for other threads finishing this round */
  
          for (i = k + 1;(i &lt; N); i++)
          {
              if (thread_id == (i % NO_PROCESS))
              {
                  for (j = k + 1;(j &lt; 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(&amp;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 &lt; N; i++)
          {
              for (j = 0; j &lt; 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 &lt; N; i++)
          {
              for (j = 0; j &lt; 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 &lt; 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 &lt; N; i++)
      {
          printf("[");
  
          for (j = 0; j &lt; N; j++)
              printf(" %5.2f,", A[i][j]);
  
          printf("]\n");
      }
  
      printf("Vector b:\n[");
  
      for (j = 0; j &lt; N; j++)
          printf(" %5.2f,", b[j]);
  
      printf("]\n");
  
      printf("Vector y:\n[");
  
      for (j = 0; j &lt; 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 &gt; 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;
              }
  }
  </code></pre>
  
  <p>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.</p>
  
  <p>Please let me know from start until end step by step. I am a beginner in programming please tell me step by step...</p>