在C中的pthreads之间划分任务?

时间:2017-11-01 01:25:58

标签: c pthreads

目前我正在创建一个程序,从1-99创建60个随机整数,并将它们存储在[5] [12] 2d数组中,我正在尝试使用pthreads,以便用户在2之间输入一个数字x &安培; 4包括,并且对于数组中的每个偶数,数字递增1,并且对于每个奇数,它递减1,其中x个线程执行递增/递减。目前我有这个:

int randint[5][12];
int x;

void *routine(void* arg){
  for(int i = 0; i < 5; i++){
    for(int j = 0; j < 12; j++){
        if(randint[i][j] % 2){
            randint[i][j]--;
        }
        else randint[i][j]++;
    }
  }
return NULL;
}

int main(int argc, char* argv[]){
   x = atoi(argv[1]);
   time_t t;
   assert(x >= 2 && x <= 4);
   printf("You entered: %d\n", x);

   srand((unsigned) time(&t));
   printf("Original Array\n");
   for(int i = 0; i < 5; i++){
       for(int j = 0; j < 12; j++){
           randint[i][j] = rand() % (99 + 1 - 1) + 1;
           printf("%d\t", randint[i][j]);
       }
    printf("\n");
   }
   printf("\n\n");

   pthread_t thr;
   int r;
   for(int i = 1; i <= x; i++){
       r=pthread_create(&thr, NULL, &routine, (void*)(long)i);
   }
   pthread_join(thr, NULL);



   printf("Updated Array\n");
   for(int i = 0; i < 5; i++){
       for(int j = 0; j < 12; j++){
           printf("%d\t", randint[i][j]);
       }
       printf("\n");
   }
   printf("\n");


}

目前,如果创建了多个线程,pthread函数会变得奇怪,这显然不是计划。

我的问题是我如何在x个pthread之间划分[5] [12]数组,这样它们就不会相互递增/递减,并且每个线程获得(相对)相等的份额数组?

0 个答案:

没有答案