C 使用pthreads后输出的代码不正确
我正在编写一些代码,试图让它使用线程,但收效甚微。代码如下(使用一些在线TUT) (1) 创建一个数组以保存要传递给每个线程的参数。 (2) 存储线程参数的结构 (3) 每个线程执行的函数 (4) Main,在这里我创建每个pthread并传递参数<代码>结束和开始是虚拟的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
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]);