Computação Paralela

[Computação Paralela] – Thread

Computação paralela é uma forma de computação em que vários cálculos são realizados simultaneamente, operando sob o princípio de que grandes problemas geralmente podem ser divididos em problemas menores, que então são resolvidos concorrentemente (em paralelo).

  •  Thread

Thread é uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrentemente. 

O suporte à thread é fornecido pelo próprio sistema operacional (SO). Uma linha de execução permite que o usuário de programa, por exemplo, utilize uma funcionalidade do ambiente enquanto outras linhas de execução realizam outros cálculos e operações.

Em hardwares com apenas uma única CPU, cada linha de execução (Thread) é processada de forma aparentemente simultânea, pois a mudança entre uma linha e outra é feita de forma tão rápida que para o usuário isso está acontecendo paralelamente.

Em hardwares com multiplos CPUs ou multi-cores as linhas de execução (Threads) podem ser realizadas realmente de forma simultânea.

Os sistemas que suportam apenas uma única linha de execução são chamados de monothread e aqueles sistemas que suportam múltiplas linhas de execução são chamados de multithread.

exemplo_thread.c

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

#define THREADS_MAX 4

void *function(void *param)

{
     int id = (int)param;
     int i, loops = 10;

     for(i = 0; i < loops; i++)
     {
          printf("thread %d: loop %d\n", id, i);
     }
     pthread_exit(NULL);

}

int main(void){
     pthread_t threads[THREADS_MAX];
     int i;

     printf("pre-execution\n");
     for (i = 0; i < THREADS_MAX; i++)
     {
          pthread_create(&threads[i], NULL, function, (void *)i);
     }

     printf("mid-execution\n");

    for (i = 0; i < THREADS_MAX; i++)
     {
     pthread_join(threads[i], NULL);
     }

     printf("post-execution\n");

     return EXIT_SUCCESS;
}

Compile

fredim@novagenesis:~$ gcc -o thread exemplo_thread.c -pthread

Execute

fredim@novagenesis:~$ ./threadpre-execution

mid-execution

thread 0: loop 0

thread 0: loop 1

thread 0: loop 2

thread 0: loop 3

thread 0: loop 4

thread 0: loop 5

thread 0: loop 6

thread 0: loop 7

thread 0: loop 8

thread 0: loop 9

thread 1: loop 0

thread 1: loop 1

thread 1: loop 2

thread 1: loop 3

thread 1: loop 4

thread 1: loop 5

thread 1: loop 6

thread 1: loop 7

thread 1: loop 8

thread 1: loop 9

thread 3: loop 0

thread 3: loop 1

thread 3: loop 2

thread 3: loop 3

thread 3: loop 4

thread 3: loop 5

thread 3: loop 6

thread 3: loop 7

thread 3: loop 8

thread 3: loop 9

thread 2: loop 0

thread 2: loop 1

thread 2: loop 2

thread 2: loop 3

thread 2: loop 4

thread 2: loop 5

thread 2: loop 6

thread 2: loop 7

thread 2: loop 8

thread 2: loop 9

post-execution
Anúncios