Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <pthread.h>
- #include <stdio.h>
- #include <stdlib.h>
- // Variáveis globais utilizadas pelas threads.
- int inc;
- int inicioTemp;
- int fimTemp;
- void encontraPrimos(int inicio, int fim, int id) {
- int i, aux, flag;
- printf("Números primos da Thread[%d]: \n", id);
- for (i = inicio; i < fim; i++) {
- flag = 0;
- for (aux = 2; aux <= i/2; aux++)
- if ((i % aux) == 0) {
- flag = 1;
- break;
- }
- // Caso o número for divisível por 1 e ele mesmo apenas, então o flag = 0, e portanto é primo.
- if (flag == 0 && i != 1) // O '1' ñ. é um número primo (apenas 1 divisor).
- printf(" %d", i);
- }
- printf("\n");
- }
- void *threadFunction(void *thread_id) {
- long id = (long)thread_id;
- printf("Thread[%ld]:\n", id);
- printf("Intervalo: [%d, %d]\n", inicioTemp, fimTemp);
- encontraPrimos(inicioTemp, fimTemp, (int)id);
- inicioTemp += inc; // Define o início do próximo intervalo.
- fimTemp += inc; // Define o fim do próximo intervalo.
- }
- void main() {
- int T;
- printf("Insira o número de threads: ");
- scanf("%d", &T);
- pthread_t thread[T]; // Vetor com 'T' threads para o cálculo dos núm. primos.
- inc = 1000/T; // Tamanho do intervalo.
- inicioTemp = 1; // Primeiro intervalo começa em 1.
- fimTemp = inc; // Inicia o fim do primeiro intervalo com a variável tamanho do intervalo.
- long i; // ID da thread.
- for (i = 0; i < T; i++) { // Criação das threads:
- printf("Criando thread %d\n", i);
- pthread_create(&thread[i], NULL, threadFunction, (void *)i);
- printf("\n");
- }
- // Espera por todas as threads encerrarem.
- for (i = 0; i < T; i++) {
- pthread_join(thread[i], NULL);
- }
- pthread_exit(NULL);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement