Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'):...

23
Programação Concorrente Pthreads Prof. Eduardo Alchieri

Transcript of Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'):...

Page 1: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

Programação Concorrente

Pthreads

Prof. Eduardo Alchieri

Page 2: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

Ferramentas

Linguagem de programação C (Pthreads) gcc – GNU Compiler Collection

Qualquer editor de texto

Page 3: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

O Modelo POSIX Threads (Pthreads)

Modelo que suporta a criação e manipulação de tarefas cuja execução possa ser intercalada ou executada concorrentemente.

O modelo Pthreads pertence à família POSIX (Portable Operating System Interface) e define um conjunto de rotinas (biblioteca) para manipulação de threads.

As definições da biblioteca Pthreads encontram-se em 'pthread.h' e sua implementação em 'libpthread.so'.

Para compilar um programa com threads é necessário inlcuir o cabeçalho '#include <pthread.h>' no início do programa e compilá-lo com a opção '-lpthread'.

Page 4: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

Estruturas e Funções Usadas Biblioteca pthread.h

pthread_t (struct) pthread_create pthread_join pthread_kill pthread_exit Outras: man pthreads

Page 5: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

Criação de Threads

Quando o programa inicia, uma thread (main thread) é criada. Após isso, outras threads podem ser criadas através da função:

Page 6: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

Criação de Threads

Exemplo:

Page 7: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

Criação de Threads

Exemplo (passando parâmetros):

Page 8: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

Sincronização Como sincronizar as threads ?

Mutexes:

Operações:

Page 9: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

Sincronização Como sincronizar as threads ?

Variáveis condição: pthread_cond_t (estrutura)

Operações: pthread_cond_wait (pthread_cond_t * cond, pthread_cond_t * mutex) pthread_cond_signal(pthread_cond_t * cond) pthread_cond_broadcast(pthread_cond_t * cond)

Page 10: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

Sincronização Como sincronizar as threads ?

Semáforos ('semaphore.h'):

Operações:

Page 11: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

Produtor/Consumidor

Page 12: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

1ª Tentativa de solução

Page 13: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

1ª Tentativa de solução

Page 14: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

1ª Tentativa de solução

Page 15: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

1ª Tentativa de solução

Qual é o problema com o programa anterior ?

Page 16: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

2ª Tentativa de solução

Page 17: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

2ª Tentativa de solução

Page 18: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

2ª Tentativa de solução

Page 19: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

2ª Tentativa de solução

Qual é o problema com o programa anterior ?

Page 20: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

3ª Tentativa de solução

Page 21: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

3ª Tentativa de solução

Page 22: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

3ª Tentativa de solução

Page 23: Programação Concorrente - CIC/UnBComo sincronizar as threads ? Semáforos ('semaphore.h'): Operações: Produtor/Consumidor 1ª Tentativa de solução 1ª Tentativa de solução

3ª Tentativa de solução

Qual é o problema com o programa anterior ?●NENHUM! Agora está correto!!!