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);

}