问题:我有几个文本文件(10),每行都有数字。我需要将它们拆分到我使用 pthread 库创建的一些线程中。创建的这些线程(工作线程)将找到发送给它们的最大素数(以及所有文本文件中的所有最大素数)。
我目前对解决方案的想法:我认为自己有两个数组,一个数组中的所有文本文件,另一个数组将包含一个二进制文件,我可以读取 1000 行并将指针发送到该二进制文件的索引在一个包含 id、文件指针和文件位置的结构中,让它通过它。
我在说的一点点:
pthread_create(&threads[index],NULL,workerThread,(void *)threadFields[index]);//Pass struct to each worker
结构:
typedef struct threadFields{
int *id, *position;
FILE *Fin;
}tField;
如果有人有任何见解或更好的解决方案,将不胜感激
编辑:好的,所以我找到了解决问题的方法,我相信它类似于 SaveTheRbtz 的建议。这是我实现的:我把文件合并到一个二进制文件中,并在循环中跟踪它(我必须考虑每个条目有多少字节,这是硬编码的)
struct threadFields *info = threadStruct;
int index;
int id = info->id;
unsigned int currentNum = 0;
int Seek = info->StartPos;
unsigned int localLargestPrime = 0;
char *buffer = malloc(50);
int isPrime = 0;
while(Seek<info->EndPos){
for(index = 0; index < 1000; index++){//Loop 1000 times
fseek(fileOut,Seek*sizeof(char)*20, SEEK_SET);
fgets(buffer,20,fileOut);
Seek++;
currentNum = atoi(buffer);
if(currentNum>localLargestPrime && currentNum > 0){
isPrime = ChkPrim(currentNum);
if( isPrime == 1)
localLargestPrime = currentNum;
}
}