gpt4 book ai didi

并发线程和全局变量

转载 作者:行者123 更新时间:2023-11-30 15:11:55 25 4
gpt4 key购买 nike

我有一个处理文件的函数。在我的主要方法中,我有一个循环创建(文件数)子线程,并同时处理它们。我必须有一个特定的输出,例如输出需要与调用的文件完全相同,因此如果使用“a.out file1 file2 file3”调用我的程序,则输出需要为“output file1,output 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 存储为不同的值。然后,在 main 方法的末尾,我可以按顺序打印它。

任何帮助将不胜感激。谢谢。

最佳答案

最简单的解决方案是使 vector 数组全局化(使其更加动态,或者以过度的大小进行调整...),然后让每个线程等待前一个线程完成(线程 n 在线程 n 上调用 join -1,线程 0 除外),然后吐出其输出。

希望他们在开始读取输入时不会立即开始输出内容...或者您必须缓存它,然后等待前一个完成,然后再写入该缓存。

HTH

关于并发线程和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35351620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com