#06 - Interface de sincronização de Threads Posix: Variáveis de Condição
Objectivos
Apresentação das primitivas básicas de sincronização por variáveis de condição da interface de Threads Posix. Realização de um exercício em que se simula a gestão de uma base de dados bancária num ambiente multi-threaded.
Novas chamadas ao sistema
#include <pthread.h> int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr); int pthread_cond_signal(pthread_cond_t *cond); int pthread_cond_broadcast(pthread_cond_t *cond); int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); int pthread_cond_destroy(pthread_cond_t *cond);
Exercícios propostos
- Retomando o exercício da aula anterior (banco), modifique a implementação por forma a que as operações de lançamento e transferência bloqueiem enquanto o saldo disponível for insuficiente.
- Implemente o tipo abstracto de dados bounded buffer de inteiros
para uso em cenários de concorrência. As operações a suportar
deverão ser:
int boundedbuffer_init(boundedbuffer_t *buffer, size_t size); int boundedbuffer_put(boundedbuffer_t *buffer, int value); int boundedbuffer_get(boundedbuffer_t *buffer, int *value); int boundedbuffer_destroy(boundedbuffer_t *buffer);
- Implemente um animador concorrente para o bounded buffer.