C 使用pthreads后输出的代码不正确

C 使用pthreads后输出的代码不正确,c,multithreading,pthreads,C,Multithreading,Pthreads,我正在编写一些代码,试图让它使用线程,但收效甚微。代码如下(使用一些在线TUT) (1) 创建一个数组以保存要传递给每个线程的参数。 (2) 存储线程参数的结构 (3) 每个线程执行的函数 (4) Main,在这里我创建每个pthread并传递参数结束和开始是虚拟的i和i+1,仅用于测试目的 #include <pthread.h> struct thread_data* thread_data_array; struct thread_data{ int thread_i

我正在编写一些代码,试图让它使用线程,但收效甚微。代码如下(使用一些在线TUT)

(1) 创建一个数组以保存要传递给每个线程的参数。 (2) 存储线程参数的结构 (3) 每个线程执行的函数 (4) Main,在这里我创建每个pthread并传递参数<代码>结束和开始是虚拟的
i
i+1
,仅用于测试目的

#include <pthread.h>
struct thread_data* thread_data_array;

struct thread_data{
   int  thread_id;
   int  begin;
   int  end;
};
void *proccessData(void *threadarg)
{
  struct thread_data *my_data = (struct thread_data *) threadarg;
  int id = my_data->thread_id;
  int start = my_data->begin;
  int end = my_data->end;
  printf("%s%d%s%d%s%d%s","Process: Id ",id," begin: ",start," end: ",end,"\n");

  // Init
  FILE* fileOut;
  // do stuff
  fileOut = fopen(someNameUsingId, "w");
  // more stuff
  fclose(fileOut);
}
int main(int argc, char **argv)
{
  int n_th = atoi(argv[1]);
  thread_data_array = malloc(n_th*sizeof(struct thread_data));
  pthread_t threads[n_th];
  int i;

  for (i=0; i<n_th; i++)
  {
    thread_data_array[i].thread_id = i;
    thread_data_array[i].begin = i;
    thread_data_array[i].end = i+1;
    pthread_create(&threads[i], NULL, proccessData,(void *) &thread_data_array[i]);
  }
}
有人能指出我做错了什么,以及如何解决它吗


提前感谢

您的
main
将在其他线程之前终止
main
是特殊的,因为从它返回相当于调用
exit


使用
pthread\u exit
结束
main
或使用
pthread\u join
等待其他线程的终止。

您的
main
在其他线程之前终止
main
是特殊的,因为从它返回相当于调用
exit


使用
pthread\u exit
结束
main
或使用
pthread\u join
等待其他线程的终止。

pthread\u join
将解决此问题,为main中创建的每个线程调用它<调用code>pthread_join()函数以等待线程完成。如果main是在线程完成之前完成的,那么它们将在完成任务之前死亡。

code>pthread\u join将解决此问题,为main中创建的每个线程调用它<调用code>pthread_join()函数以等待线程完成。如果main是在线程完成之前完成的,那么它们将在完成任务之前死亡。

我认为
main
是在线程完成之前结束的,但是不知道如何解决它
pthread\u join
将解决问题,为main中创建的每个线程调用它是否有必要?因为我真的不需要加入它们,只需要调用每个线程执行其工作
pthread\u join()
函数来等待线程完成。如果在线程完成之前完成main,那么它们将在完成作业之前死亡!谢谢把它作为答案贴出来,我会接受的。你能解释一下为什么这是必要的吗?我认为
main
在线程结束之前就结束了,但不知道如何解决它
pthread\u join
将解决这个问题,为main中创建的每个线程调用它这是必要的吗?因为我真的不需要加入它们,只需要调用每个线程执行其工作
pthread\u join()
函数来等待线程完成。如果在线程完成之前完成main,那么它们将在完成作业之前死亡!谢谢把它作为答案贴出来,我会接受的。你能解释一下为什么这是必要的吗?因为我自己可能会看到这一点,这是我为(I=0;我自己可能会看到这一点)添加的代码,这是我为(I=0;我自己可能会看到这一点,这是我添加的代码(i=0;正如我自己可能看到的,这是我为(i=0;i)添加的代码
  thread_data_array[0].thread_id = 1;
  thread_data_array[0].begin = 0;
  thread_data_array[0].end = 1;
  proccessData((void *) &thread_data_array[0]);

  thread_data_array[1].thread_id = 2;
  thread_data_array[1].begin = 1;
  thread_data_array[1].end = 2;
  proccessData((void *) &thread_data_array[1]);