1
我有一个文件,其中包含一个文件名列表,其中我想要搜索一个词并替换它 我修改了一些代码,仅仅显示相关部分 问题是如果我有只有一个文件在该列表中,它不会用多线程处理它,因为线程只在我有多个文件时才工作 所以我想保留当前的线程配置,但我想在处理部分添加一些线程 我有验证码:从pthread运行pthreads
struct words_list {
char word[20];
struct words_list * next;
};
FILE * INFILE;
int num_thread = 10;
// Mutex variables
pthread_mutex_t input_queue;
pthread_mutex_t word_list;
int main(int argc,char **argv)
{
//some code is missing
if((INFILE = fopen(myfile,"r")) == NULL) {
fprintf(stderr,"Can't open input file\n");
exit(0);
}
for(i = 0 ; i < number_thread; i++)
{
if(pthread_create(&thread_id[i],NULL,&search,NULL) != 0)
{
i--;
fprintf(stderr,RED "\nError in creating thread\n" NONE);
}
}
for(i = 0 ; i < number_thread; i++)
if(pthread_join(thread_id[i],NULL) != 0)
{
fprintf(stderr,RED "\nError in joining thread\n" NONE);
}
fflush(INFILE);
fclose(INFILE);
}
void * search(void * data)
{
char file[20];
while (!feof(INFILE))
{
if (fgets(file,sizeof(file),INFILE) != NULL)
{
if (strlen(file) < 8)
break;
if (file[strlen (file) - 1] == '\n')
file[strlen (file) - 1] = '\0';
}
process(file);
}
return NULL;
}
void process(char *filename)
{
char buff[512];
char word[20];
struct words_list * curr_word = first_word;
if(verbose != 0)
fprintf(stderr,"Processing: %s\n",filename);
while(curr_word != NULL)
{
//some code missing
pthread_mutex_lock(&word_list);
strncpy(word,curr_word->word,sizeof(word) - 1);
pthread_mutex_unlock(&word_list);
**//replace_word must run with multiple threads**
ret = replace_word(word,buff,sizeof(buff));
//end of threads part
//code missing
}
}
我怎样才能在加粗部分添加其他并行线程所以它可以用多个线程处理每个文件?
以什么方式代码类似于您在主要使用的代码失败? –
我想要类似于我在main中使用的东西,但不知道如何添加它以避免一些混乱。 –
如果文件列表中只包含一个文件,是否要用多个线程处理文件?它不会使用当前的'process'实现。你需要改变它。 :) – Bechir