Advertisement
Guest User

Untitled

a guest
Mar 30th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.80 KB | None | 0 0
  1. #include <pthread.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. // Variáveis globais utilizadas pelas threads.
  6. int inc;
  7. int inicioTemp;
  8. int fimTemp;
  9.  
  10. void encontraPrimos(int inicio, int fim, int id) {
  11.     int i, aux, flag;
  12.  
  13.     printf("Números primos da Thread[%d]: \n", id);
  14.  
  15.     for (i = inicio; i < fim; i++) {
  16.         flag = 0;
  17.  
  18.         for (aux = 2; aux <= i/2; aux++)
  19.             if ((i % aux) == 0) {
  20.                 flag = 1;
  21.                 break;
  22.             }
  23.    
  24.         // Caso o número for divisível por 1 e ele mesmo apenas, então o flag = 0, e portanto é primo.
  25.         if (flag == 0 && i != 1) // O '1' ñ. é um número primo (apenas 1 divisor).
  26.             printf(" %d", i);
  27.     }
  28.  
  29.     printf("\n");
  30. }
  31.  
  32. void *threadFunction(void *thread_id) {
  33.     long id = (long)thread_id;
  34.  
  35.     printf("Thread[%ld]:\n", id);
  36.     printf("Intervalo: [%d, %d]\n", inicioTemp, fimTemp);
  37.  
  38.     encontraPrimos(inicioTemp, fimTemp, (int)id);  
  39.  
  40.     inicioTemp += inc;                                              // Define o início do próximo intervalo.
  41.     fimTemp += inc;                                                 // Define o fim do próximo intervalo.
  42. }
  43.  
  44. void main() {
  45.     int T;
  46.     printf("Insira o número de threads: ");
  47.     scanf("%d", &T);
  48.  
  49.     pthread_t thread[T];                                                // Vetor com 'T' threads para o cálculo dos núm. primos.
  50.    
  51.     inc = 1000/T;                                                       // Tamanho do intervalo.
  52.     inicioTemp = 1;                                                     // Primeiro intervalo começa em 1.
  53.     fimTemp = inc;                                                      // Inicia o fim do primeiro intervalo com a variável tamanho do intervalo.
  54.  
  55.     long i;                                                             // ID da thread.
  56.    
  57.     for (i = 0; i < T; i++) {                                           // Criação das threads:
  58.         printf("Criando thread %d\n", i);
  59.  
  60.         pthread_create(&thread[i], NULL, threadFunction, (void *)i);       
  61.  
  62.         printf("\n");
  63.     }  
  64.  
  65.     // Espera por todas as threads encerrarem.
  66.     for (i = 0; i < T; i++) {
  67.         pthread_join(thread[i], NULL);                         
  68.     }  
  69.    
  70.     pthread_exit(NULL);    
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement