Fire de execuție
Some people, when confronted with a problem, think, “I know, I’ll use threads!” Now they have 10 problems. –Bill Schindler
Folosind mecanismul de thread-uri realizați un program C ce determină numărul de fișiere dintr-o ierarhie de directoare.
Pentru fiecare subdirector de pe primul nivel se va porni un thread nou ce va realiza procesarea subdirectorului respectiv.
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
//funcţia ce va fi executatăde thread-uri
void* print_message( void *ptr ){
char *message;
message = (char *) ptr;
printf("%s ", message);
return NULL;
}
int main(){
pthread_t thread1, thread2;
char *message1 = "Hello";
char *message2 = "World\n";
// creearea primului thread – tipăreşte Hello
if (pthread_create( &thread1, NULL, &print_message, (void*)message1)){
fprintf(stderr,"first thread error\n");
exit(1);
}
// “adoarme” procesul părinte pentru o secundă.
sleep(1);
// creearea celui de al doilea thread – tipăreşte World
if(pthread_create( &thread2, NULL, &print_message, (void*)message2)){
fprintf(stderr,"second thread error\n");
exit(1);
}
sleep(1);
exit(0);
}
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
// definirea structurii de date ce va fi transmisă ca argument thread-ului
struct chars {
char val;
int count;
}
;
// funcția thread-ului
void *char_print(void *ptr){
struct chars* c = (struct chars*)ptr;
for(int i=0;i <c->count;i++) putchar(c->val);
pthread_exit(0);
}
int main(){
pthread_t thread1, thread2;
struct chars thread1_arg,thread2_arg;
// stabilirea parametrilor pentru thread-uri
thread1_arg.val='a';
thread1_arg.count=100000;
thread2_arg.val='b';
thread2_arg.count=150000;
// creearea thread-urilor
pthread_create(&thread1,NULL,&char_print,&thread1_arg);
pthread_create(&thread2,NULL,&char_print,&thread2_arg);
// thread-ul părinte aşteaptă încheierea excuţiei thread-urilor fiu.
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
// încheierea execuției
exit(0);
}