Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Sistemas Operacionais: Calculando Média, Maior e Menor de um Vetor Usando Threads, Exercícios de Sistemas Operacionais

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

2021

Compartilhado em 12/11/2021

lfds-11
lfds-11 🇧🇷

1 documento

1 / 4

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
//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++){
pf3
pf4

Pré-visualização parcial do texto

Baixe Sistemas Operacionais: Calculando Média, Maior e Menor de um Vetor Usando Threads e outras Exercícios em PDF para Sistemas Operacionais, somente na Docsity!

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