![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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050607/5fae58fffd27e06afa484833/html5/thumbnails/23.jpg)
3ª Tentativa de solução
Qual é o problema com o programa anterior ?●NENHUM! Agora está correto!!!