我正在使用多線程訪問使用線程的各種隨機文件。但是,我收到錯誤[Thread 0x7ffff7007700 (LWP 16256) exited]
。此外,信息線程顯示僅創建2個線程。但是,我正在努力創造100個。另外,我必須在我的情況下使用pthread_join()函數嗎?驗證碼:有使用線程的多個文件訪問
#define NTHREADS 100
void *encrypt(void *args)
{
int count = *((int*) args);
AES_KEY enc_key;
AES_set_encrypt_key(key, 128, &enc_key);
int i;
for(i=1;i<=count;i++){
char *ifile;
char *ofile;
long length;
size_t result;
char * buffer;
sprintf(ifile,"random_files/random_%d.txt",i);
FILE *ifp = fopen(ifile,"rb");
if (ifp==NULL) {fputs ("File error",stderr); exit (1);}
fseek(ifp,0, SEEK_END);
length = ftell(ifp);
fseek (ifp,0, SEEK_SET);
buffer = (char*) malloc (sizeof(char)*length);
if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
result = fread (buffer, 1, length, ifp);
if (result != length) {fputs ("Reading error",stderr); exit (3);}
printf("%s",buffer);
fclose (ifp);
free(buffer);
}
}
int main(){
int i,j,count =0;
pthread_t threads[NTHREADS];
for (i=0; i<NTHREADS; i++){
count = count +20;
int *count_ptr = &count;
if(pthread_create(&threads[i], NULL, encrypt, count_ptr)!=0){
fprintf(stderr, "error: Cannot create thread # %d\n", i);
break;
}
}
printf("After Thread\n");
exit(0);
}
1.在follow-for循環中加入你的線程。 2.你有一個競爭條件。主循環中相同的'count',隨着每個循環迭代而改變,正在通過* all *你的線程來解決。您發送的地址相同*全部*。 3. *驗證返回結果*。 – WhozCraig
@WhozCraig感謝您的評論。是否有可能發送不同的計數值到每個新線程的加密函數? –