Ich benutze mehrere Threads, um verschiedene zufällige Dateien mit Threads zugreifen. Ich erhalte jedoch einen Fehler [Thread 0x7ffff7007700 (LWP 16256) exited]
. Info-Threads zeigen außerdem, dass nur 2 Threads erstellt werden. Ich versuche jedoch, 100 davon zu erstellen. Muss ich in meinem Fall auch die Funktion pthread_join() verwenden? Der Code:Mehrere Dateizugriffe mit Threads
#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. Verbinden Sie Ihre Threads in einer Follow-up-Schleife. 2. Sie haben eine Race Condition. Das gleiche "count" zurück in main, das sich mit jeder Schleifeniteration ändert, wird von * all * Ihren Threads adressiert. Sie senden die gleiche Adresse an * alle * von ihnen. 3. * validiere Rückkehrergebnisse *. – WhozCraig
@WhozCraig Danke für Ihren Kommentar. Ist es möglich, für jeden neuen Thread verschiedene vales von count an die encrypt-Funktion zu senden? –