


Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Neste documento, é apresentado um programa em c que utiliza threads para calcular a média, o maior e o menor valor de um vetor de números aleatórios. O programa recebe o tamanho do vetor por linha de comando e preenche-o com números aleatórios. Em seguida, criam-se três threads, uma para cada função: media, maior e menor. Cada thread processa a lista de números e retorna o resultado para a função main, que imprime os resultados.
Tipologia: Exercícios
1 / 4
Esta página não é visível na pré-visualização
Não perca as partes importantes!



//Disciplina: Sistemas Operacionais #include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <time.h> //Variáveis globais, usadas nos threads; int SIZE; //Tamanho da lista de números float valorMedia; //Variável que vai receber o resultado da média dos números da lista int valorMaior; //Variável que vai receber o maior número da lista int valorMenor; //Variável que vai receber o menor número da lista void * media(void * arg); //Função do Thread 1 void * maior(void * arg); //Função do Thread 2 void * menor(void * arg); //Função do Thread 3 int main(int argc, char **argv){ int lista; //Lista de números(vetor) SIZE = atoi(argv[1]); //Recebe um numero por linha de comando, que é convertido de string para int pthread_t t1, t2, t3; //Identificadores dos threads lista = (int)malloc(SIZE * sizeof(int)); //Alocando espaço da lista de números(vetor) //Preenchendo a lista(vetor) com números aleatórios de 1 a 20 printf("\nNúmeros: \n"); srand(time(NULL)); for(int i = 0; i < SIZE; i++){
lista[i] = 1 + rand() % 20; printf("%d ", lista[i]); } //Criando os threads para a execução das funções passadas para cada um e passando a lista(vetor) de números pthread_create(&t1, NULL, media, (void *)(lista)); pthread_create(&t2, NULL, maior, (void *)(lista)); pthread_create(&t3, NULL, menor, (void *)(lista)); pthread_join(t1, NULL); pthread_join(t2, NULL); pthread_join(t3, NULL); printf("Á media dos numeros da lista: %.2f\n\n", valorMedia); printf("O maior numero da lista: %d\n\n", valorMaior); printf("O menor numero da lista: %d\n\n", valorMenor); free(lista); return EXIT_SUCCESS; } //Calculando a média void * media(void * arg){ printf("\n\nThread 1 executando...\n"); int lista_m = (int)(arg); float soma = 0; for(int i = 0; i < SIZE; i++){ soma+= lista_m[i]; } valorMedia = soma/SIZE;