c - 将数组作为参数传递给 C 中的新线程

标签 c arrays multithreading

我正在尝试使用 pthread_create 将数组作为参数传递给新线程中的函数,这可能吗?我有一个整数数组和一个从创建线程方法调用的计算平均值方法,但我似乎无法将我的数组正确传递到该方法中。这是我的代码: 整数[];

int average;

int size = 0;


void *calcAvg(int *nums[]);

int main(int argc, char *argv[]){
    /* initialize an array of the integers to be passed */
    nums[argc - 1];
    for(int i = 0; i < argc - 1; i++){
        nums[i] = atoi(argv[i + 1]);
        size++;
    }

    /* Thread Identifier */
    pthread_t avgThread;

    pthread_create(&avgThread, NULL, calcAvg, nums);

    pthread_join(avgThread, NULL);

    printf("average= %d", average);
}

void *calcAvg(int *nums[]){
    int sum;
    for(int i = 0; i < size; i++){
        sum += nums[i];
    }
    average = sum / (size);
    pthread_exit(0);
}

最佳答案

你的代码中有很多问题,我修复了一些以编译 希望对你有帮助

编译:gcc -o main main.c -lpthread

执行:./main 2 5

输出:3

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

int average;

int size = 0;


void *calcAvg(void *arg);
int main(int argc, char *argv[]){
  /* initialize an array of the integers to be passed */
  int *nums = (int*)malloc((argc - 1)*sizeof(int));
  int i = 1;
  for(i = 1; i < argc ; i++){
    nums[i-1] = atoi(argv[i]);
    size++;
  }

  /* Thread Identifier */
  pthread_t avgThread;

  pthread_create(&avgThread, NULL, calcAvg, (void*)nums);

  pthread_join(avgThread, NULL);
  printf("average = %d \n",average);
  free(nums);

}
void *calcAvg(void *arg){
  int *val_p = (int *) arg;
  int sum = 0;
  int i = 0;
  for( i = 0; i < size; i++){
    sum += val_p[i];
  }
  average = sum / (size);
  pthread_exit(0);
}

关于c - 将数组作为参数传递给 C 中的新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22003083/

相关文章:

c - 这个返回语句是什么意思

objective-c - 系统 : job_mig_spawn() can't find its session

java - 停止线程 onclicklistener java

创建节点链接列表

c - 如何导出 C 表达式 "4 - 2 - 1"?

Javascript 2D 数组未按预期返回结果

C# 具有相同内存的多个数组

arrays - 当容量减少时, slice 的行为如何?

ruby-on-rails - 测量多线程环境中线程的执行时间

c - 如何正确使用c中的线程和套接字?