我正在尝试实现此功能的并行性,我希望它占用尽可能多的线程,并将结果写入文件。
结果需要以递增顺序写入文件中,因此第一个结果必须先写入第二个第二个,依此类推。
keyGen函数只是一个整数m的MD5,它用作每个链的起点。 Reduction32是归约函数,它需要将前8个字节加到t并返回该值。当链到达其端点时,它将存储在二进制文件中。
有什么聪明的办法可以做到这一点吗?无需弄清楚端点存储的顺序?
void tableGenerator32(uint32_t * text){
int mMax = 33554432, lMax = 236;
int m, t, i;
uint16_t * temp;
uint16_t * key, ep[2];
uint32_t tp;
FILE * write_ptr;
write_ptr = fopen("table32bits.bin", "wb");
for(m = 0; m < mMax ; m++){
key = keyGen(m);
for (t = 0; t < lMax; t++){
keyschedule(key);
temp = kasumi_enc(text);
tp = reduction32(t,temp);
temp[0]=tp>>16;
temp[1]=tp;
for(i=0; i < 8; i++){
key[i]=temp[i%2];
}
}
for(i=0;i<2;i++)
ep[i] = key[i];
fwrite(ep,sizeof(ep),1,write_ptr);
}
fclose(write_ptr);
}
最佳答案
在不遇到并发问题的情况下并行化上述功能的最佳方法是,创建与您希望使用的线程一样多的内存流,然后将任务划分为多个部分,例如,如果您有4个线程,
然后将结果流连接起来并将它们写入文件。
关于c - 并行化功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30867352/