Buscar

threadsoma

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

/*Dado uma matriz de 10 elementos, criar uma thread para somar metade dos elementos da matriz
e outra para somar a outra metade.*/
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 2
int matriz[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
typedef struct {
 int id;
 int inicial_idx;
 int final_idx;
 int soma;
} thread_arg;
void* minha_thread(void* arg) {
 
 int i;
 thread_arg *a = (thread_arg*)arg;
 printf("THREAD %d FALANDO AQUI!\n", a->id);
 a->soma = 0;
 
 
 for (i = a->inicial_idx; i < a->final_idx; i++)
 {
 a->soma += matriz[i];
	//printf("Thread %d, Somando Indice [%d]\n",a->id,i);
 }
	
 pthread_exit((void*)NULL);
}
int main() {
 int i, tam_metade_matriz=5;
 pthread_t tids[NUM_THREADS];
 thread_arg args[NUM_THREADS];
 //criando as threads 
 for (i = 0; i < NUM_THREADS; i++) {
 args[i].id = i;
 args[i].inicial_idx = i * tam_metade_matriz;
 	args[i].final_idx = (i+1)*5;
	
 pthread_create(&tids[i], (void*) NULL, minha_thread, (void*) &args[i]);
 }
 for (i = 0; i < NUM_THREADS; i++) {
 pthread_join(tids[i], (void*) NULL);
 }
 printf("FIM\n");
 
 printf("T1= %d\n" , args[0].soma);
 printf("T2= %d\n" , args[1].soma);
 
 return 0;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais