Aula 14/03

PThreads intro

Threads vs processo

Thread é o fluxo de execução de um processo. Um processo pode ter varias threads.

Concorrencia vs Paralelismo

Concorrencia é lidar com varias coisas ao mesmo tempo, varios processos ao mesmo tempo. Paralelismo é fazer varias coisas ao mesmo tempo

Operação atomica

Operação que acontece na CPU, que não pode ser iterrompida. Ela tem que entrar so uma vez na CPU para acontecer, não fazendo uso de muitos clocks.

Taxinoma de Flynn

  • SISD: Single instruction single data. Padrão, cada processo altera um unico dado;
  • SIMD: Single instruction multiple data. Carregar multiplos dados para fazer uma operação, mesma instrução aplicada a varios dados;
  • MISD: Multiple instruction single data. Operações para um unico dado, varias instruções aplicadas á um unico valor.
  • MIMD: Multiple instruction multiple data.

Race conditions

As threads podem ocorrer ao mesmo tempo ou em tempo diferentes. Com isso, podemos ter resultados que variam, depedendo da ordem da execução dos processos. Por exemplo, se você tem duas threads fazendo um calculo em uma variavel, elas podem pegar o valor da variavel com o resultado antigo, ou com resultados não sincronizados.

Sessão critica

Trecho de codigo que deve ser executado inteiramente por uma thread, antes que qualquer coisa outra thread o comece a executar. É uma maneira de impedir esse erro da race condition. Para isso, usamos semafaros.

Semaforos

Controle de acesso a um recurso. Conta o numero de processos que podem usar um recurso ao mesmo tempo sem que nenhum outro deixe de usar.

  • MUTEX: Semaforos que so permitem valores 0 e 1. So permite o acesso a uma thread por vez, ou seja, uma tarefa que roda num semafaro vai ser a unica rodando naquele momento, é meio que uma forma de deixar só uma parte da tarefa sequencial.

Variaveis de condição

Faz com que uma thread espere ate que uma condição seja satisfeita.

Barreiras

Quando uma thread entra em uma barreira ela não pode terminar ate que todas as outras threads tenham entrado. Uteis para sincronização.

Dependencia de dados

So se pode paralelizar tarefas independetes.

DeadLocks

Multiplos processos/threads bloqueados, esperando um pelo outro. Nenhum consegue terminar pois necessita dos dados dos outros.

POSIX Threads

Para facilitar as coisas, o IEEE definiu um padrão para o uso de threads no UNIX, o PThreads. O PThreads tem a seguinte API:

Chamada Descrição
Pthread_create Cria uma nova thread
Pthread_exit Acaba a execução de uma thread
Pthread_join Espera ate que uma thread acabe
Pthread_yieid Libera a CPU para outra thread
Pthread_attr_init Cria e inicializa atributos de uma thread
Pthread_attr_destroy Remove os atributos de uma thread

Uma thread vai ser inicilizada como um ponteiro do tipo pthread_t