我有一个处理文件的函数。在我的主要方法中,我有一个创建(#文件)子线程的循环,并且同时处理它们。我必须有一个特定的输出,例如输出需要与文件被调用的完全相同,所以如果我的程序使用“a.out file1 file2 file3”调用,则输出需要是“输出file1,输出file2,输出文件3“。并行线程和全局变量
现在,它以错误的顺序输出文件,显然是因为某些线程先完成。
这里是我的代码如下所示:
char *output[10];
void *file_thread(void *arg)
{
//processing the file
// I need to write to output here.
}
int main (int argc, char **argv)
{
int e;
int status;
pthread_t thread[argc - 1];
// For each file
for (e = 1; e < argc; e++)
{
status = pthread_create(&thread[e-1], NULL, file_thread,
(char *)argv[e]);
if (status != 0)
{
err_abort(status, "pthread create");
}
}
for (e=0; e < argc - 1; e++)
{
pthread_join(thread[e], NULL);
}
/*
for(e=0; e < argc - 1; e++)
{
printf("%s", output[e]);
}
*/
return 0;
}
所以我需要做的是在main方法以某种方式跟踪每个线程变量e。我不允许使用管道。我尝试过创建一个不同的全局变量x,在创建线程之前/之后在每次迭代时将其分配给e,但在thread_file内部,它始终输出x作为最终迭代的值。
基本上,我需要根据文件号将变量e存储为不同的值。然后,在主要方法结束时,我可以按顺序打印它。
任何帮助将不胜感激。谢谢。