Como resolver esse exercicio de threads linguagem c linux

13/11/2016

0

C#

Uma empresa de estatística pretende obter quantas vezes cada número foi sorteado em uma loteria. Para
isso dispõe de uma base de dados com 10000 números, sendo que cada número pode ser um valor
inteiro de entre 0 e 9 (dez números). Utilize dez threads para calcular quantas vezes cada número foi
sorteado. A thread principal deve depois imprimir os resultados.
Nota: Tenha atenção no fato de que, em cada instante, apenas uma thread deve incrementar o
contador de um determinado número (ex: se duas threads encontraram o número 5, apenas
um deles deverá incrementar o contador relacionado com o número 5, estando a outra à
espera).

Sugestão: Utilize um array de variáveis de exclusão mútua para garantir a coerência dos dados.

Dica 1: para criar os contadores e os mutex para proteção:

#define NUM_NUMEROS 5

static pthread_mutex_t mutexes[NUM_NUMEROS] = {
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_INITIALIZER
};
int contadores[NUM_NUMEROS];

Dica 2: para incrementar um contador:

int i = 2; // incrementar o contador do número 2
pthread_mutex_lock(&mutexes[i]);
contadores[i]++;
pthread_mutex_unlock(&mutexes[i]);
Patrick Santos

Patrick Santos

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar