Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取一个线程以在C中多次运行函数 我有这个作业要求我们在一个NXN矩阵中用部分旋转来执行高斯消除,其中任意一个线程的数目都是一个语言,因为现代C++会使这个比你在这里显示的麻烦少。你的代码在C. Read中。如果你想在C++中编码,请阅读。阅读编译器(例如_C_Multithreading_Pthreads - Fatal编程技术网

获取一个线程以在C中多次运行函数 我有这个作业要求我们在一个NXN矩阵中用部分旋转来执行高斯消除,其中任意一个线程的数目都是一个语言,因为现代C++会使这个比你在这里显示的麻烦少。你的代码在C. Read中。如果你想在C++中编码,请阅读。阅读编译器(例如

获取一个线程以在C中多次运行函数 我有这个作业要求我们在一个NXN矩阵中用部分旋转来执行高斯消除,其中任意一个线程的数目都是一个语言,因为现代C++会使这个比你在这里显示的麻烦少。你的代码在C. Read中。如果你想在C++中编码,请阅读。阅读编译器(例如,c,multithreading,pthreads,C,Multithreading,Pthreads,获取一个线程以在C中多次运行函数 我有这个作业要求我们在一个NXN矩阵中用部分旋转来执行高斯消除,其中任意一个线程的数目都是一个语言,因为现代C++会使这个比你在这里显示的麻烦少。你的代码在C. Read中。如果你想在C++中编码,请阅读。阅读编译器(例如…)和调试器(例如…)的文档,并查看与问题无关的and和and,但如果声明一个函数来返回值,则必须返回某些内容,即使从未使用过。另外,(void*)i是一个不好的类型转换,您确实需要在这里分两步进行转换:(void*)(intptr\t)i。然

获取一个线程以在C中多次运行函数
我有这个作业要求我们在一个NXN矩阵中用部分旋转来执行高斯消除,其中任意一个线程的数目都是一个语言,因为现代C++会使这个比你在这里显示的麻烦少。你的代码在C. Read中。如果你想在C++中编码,请阅读。阅读编译器(例如…)和调试器(例如…)的文档,并查看与问题无关的and和and,但如果声明一个函数来返回值,则必须返回某些内容,即使从未使用过。另外,
(void*)i
是一个不好的类型转换,您确实需要在这里分两步进行转换:
(void*)(intptr\t)i
。然后在线程函数中执行相反的强制转换:
intmyid=(int)(intptr\u t)arg
@DayemSaeed:如果你想帮助我,向你的教授提一下。(我今年也碰巧在…@DayemSaeed教编程,“我的教授让我这么做的。”-你的教授建筑师/工程师是以编程为生的吗?不像其他学术界人士一样,把教授们说的作为指导,但要自己做功课,确定什么是事实与虚构。巴西尔有一些坚实的链接,我强烈建议你做一点钻研。选择一种语言,因为现代C++会使这个比你在这里显示的麻烦少。你的代码在C. Read中。如果你想在C++中编码,请阅读。阅读编译器(例如…)和调试器(例如…)的文档,并查看与问题无关的and和and,但如果声明一个函数来返回值,则必须返回某些内容,即使从未使用过。另外,
(void*)i
是一个不好的类型转换,您确实需要在这里分两步进行转换:
(void*)(intptr\t)i
。然后在线程函数中执行相反的强制转换:
intmyid=(int)(intptr\u t)arg
@DayemSaeed:如果你想帮助我,向你的教授提一下。(我今年也碰巧在…@DayemSaeed教编程,“我的教授让我这么做的。”-你的教授建筑师/工程师是以编程为生的吗?不像其他学术界人士一样,把教授们说的作为指导,但要自己做功课,确定什么是事实与虚构。Basile有一些可靠的联系,我强烈建议你做一些练习。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <pthread.h>

#define N 8
double A[N][N+1];
pthread_barrier_t barrier;

int print_matrix()
{
   int i, j;
   printf("------------------------------------\n");
   for(i=0; i<N; i++){
       for(j=0;j<N+1;j++)
          printf("%6.2f  ",  A[i][j]);
       printf("\n");
   }
}

void *ge(void *arg) // threads function: Gauss elimination
{
  int i, j, k, prow;
  int myid = (int)arg;
  double temp, factor;
  for(i=0; i<N-1; i++){
     if (i == myid){
        printf("partial pivoting by thread %d on row %d: ", myid, i);
        temp = 0.0; prow = i;
        for (j=i; j<=N; j++){
            if (fabs(A[j][i]) > temp){
               temp = fabs(A[j][i]);
           prow = j;
        }
        }
        printf("pivot_row=%d  pivot=%6.2f\n", prow, A[prow][i]);
        if (prow != i){  // swap rows
        for (j=i; j<N+1; j++){
          temp = A[i][j];
              A[i][j] = A[prow][j];
              A[prow][j] = temp;
            }
    } 
     }
     // wait for partial pivoting done
     pthread_barrier_wait(&barrier); 
     for(j=i+1; j<N; j++){
        if (j == myid){ 
           printf("thread %d do row %d\n", myid, j);
       factor = A[j][i]/A[i][i];
           for (k=i+1; k<=N; k++)
               A[j][k] -= A[i][k]*factor;
       A[j][i] = 0.0;
        }
     }
     // wait for current row reductions to finish 
     pthread_barrier_wait(&barrier);
     if (i == myid)
        print_matrix();
  }
}

int main(int argc, char *argv[])
{
  int i, j;
  double sum;
  pthread_t threads[N];
 
  printf("main: initialize matrix A[N][N+1] as [A|B]\n"); 
  for (i=0; i<N; i++)
    for (j=0; j<N; j++)
        A[i][j] = 1.0;
  for (i=0; i<N; i++)
      A[i][N-i-1] = 1.0*N;
  for (i=0; i<N; i++){
      A[i][N] = (N*(N+1))/2 + (N-i)*(N - 1);
  }
  print_matrix();  // show initial matrix [A|B]

  pthread_barrier_init(&barrier, NULL, N); // set up barrier

  printf("main: create N=%d working threads\n", N);
  for (i=0; i<N; i++){
     pthread_create(&threads[i], NULL, ge, (void *)i);
  }
  printf("main: wait for all %d working threads to join\n", N);
  for (i=0; i<N; i++){
       pthread_join(threads[i], NULL);
  }
  printf("main: back substitution : ");
  for (i=N-1; i>=0; i--){
      sum = 0.0;
      for (j=i+1; j<N; j++)
          sum += A[i][j]*A[j][N];
      A[i][N] = (A[i][N]- sum)/A[i][i];
  }
  // print solution
  printf("The solution is :\n");
  for(i=0; i<N; i++){
    printf("%6.2f  ", A[i][N]);
  }
  printf("\n");
}