Escolar Documentos
Profissional Documentos
Cultura Documentos
Legenda:
thread
Contador de
programa
P1 P2 P3
threads P11, P12 thread P21 threads P31, P32, P33
Arquivos
próximo
Com Threads
Descompactar N+1
Arquivos
Exibir N
próximo
Programação Distribuída - Thais Batista - 2000
#include <pthread.h>
int main (int argc, char *argv[])
{
pthread_t pic_thread;
int fileno;
pic_buf_t *buf;
for (fileno = 1; fileno < argc; fileno++) {
if (fileno == 1) { /* primeiro arquivo */
buf = get_next_picture((void *)argv[fileno]);
} else { /* espera que a thread de descompactação termine */
pthread_join(pic_thread, (void **)&buf);
}
if (fileno < argc - 1) {
/* dispara a thread para pegar a próxima figura (se houver) */
pthread_create(&pic_thread, NULL,
get_next_picture, (void *)argv[fileno + 1]);
}
display_buf(buf); /* mostra a figura corrente */
free(buf);
if (getchar() == EOF) /* espera que o usuário termine de olhar */
break;
}
return(0);
}
void *
get_next_picture(void * arg)
{
int fd;
pic_buf_t * buf;
■ Difíceis de Programar
– Sincronização:
» Uso de locks para coordenar o acesso a dados
compartilhados
» Controle de locks é responsabilidade do
programador
• Possibilidade de Deadlock
■ Difíceis de Depurar
■ Usar EVENTOS
– Na maioria dos casos que usam threads, eventos
são melhores
– Threads devem ser usadas apenas quando é
necessário concorrência verdadeira
Handlers de eventos
■ NÃO!
■ Importante quando há concorrência
■ Deve-se evitar Threads sempre que
possível:
– para interfaces
– para sistemas distribuídos