Duvida com exercicio sobre threads

1. Duvida com exercicio sobre threads

patrick
skyemaster

(usa Debian)

Enviado em 14/11/2016 - 14:40h

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]);


  


2. Re: Duvida com exercicio sobre threads

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 14/11/2016 - 14:53h

Olá, qual é a sua dúvida?
--
Uilian Ries
Linux Counter: 521986


3. Contadores

patrick
skyemaster

(usa Debian)

Enviado em 14/11/2016 - 15:13h

Queria saber como eu faço para incrementar o array do contador, tentei de tudo, meu professor falou que o código está bem encaminhado, porém até agora sem sucesso. Nesse codigo eu coloquei somente um vetor de 2000 numeros e 2 threads para que depois que desse certo eu colocaria as outras threads.



#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#define NUM_NUMEROS 2
static pthread_mutex_t mutexes[NUM_NUMEROS] = {
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_INITIALIZER,

};
int contadores[NUM_NUMEROS];


void *thread(void *arg);
int dados[2000];

int main(){
int i, c;
int dado_thread1 = 0, dado_thread2 = 1000;
pthread_t thread1, thread2;

for(i = 0; i < 1200; i++){
dados[i] = rand()%10;
}
pthread_create(&thread1, NULL, thread, &dado_thread1);
pthread_create(&thread2, NULL, thread, &dado_thread2);

pthread_join(thread1, NULL);
pthread_join(thread2, NULL);


for(i = 0; i < 10; i++){
printf(" Resultado: %d\n", contadores[i]);
}

return 0;
}
void *thread(void *arg){
// Converte o ponteiro recebido
int i;
int *indice_ponteiro = (int*) arg;
int indice = *indice_ponteiro;

for(i = indice; i < indice + 1000; i++){
int i = 2; // incrementar o contador do número 2
pthread_mutex_lock(&mutexes[i]);
contadores[i]++;
pthread_mutex_unlock(&mutexes[i]);

}

return NULL;
}









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts