Como resolver esse exercicio de threads linguagem c linux
13/11/2016
0
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]);
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)