Processador paralelo de imagens, feito em C, que aplica filtros em múltiplas imagens simultaneamente, utilizando threads.
Ao iniciar, o usuário deve informar:
- Diretório de entrada com as imagens (em formatos JPG/JPEG ou PNG)
- Número de threads para processamento
- Filtro a ser aplicado (grayscale, red, green, blue ou invert)
Após o término do processamento, é possível verificar as cópias processadas das imagens em um novo diretório ./<DIR_ORIGINAL>_<FILTRO>. Além disso, o programa fornece dados da quantidade de imagens tratadas e tempo decorrido na operação, permitindo também aplicar outros filtros sequencialmente sobre o diretório original.
Ao optar por "sair", são exibidas estatísticas com medições acumuladas de:
- Imagens (considerando todos filtros utilizados)
- Tempo total
- Velocidade média (imagens/segundo)
É usado Makefile para reunir a compilação de todos arquivos .c em um único executável binário. Para tanto rode o comando:
makeE execute com:
./bin/editorMultithreading
As threads são criadas de acordo com a quantidade definida pelo usuário:
- Cada thread obtém uma imagem da fila compartilhada, processa, e repete
- Quando a fila esvazia, são suspensas (não destruídas)
- Ao selecionar um novo filtro, são reativadas
Está presente nos casos:
- Threads trabalhadoras são suspensas quando a fila esvazia, acordando somente quando um novo filtro é selecionado
- Thread principal é suspensa enquanto as trabalhadoras processam
Protege o acesso à fila compartilhada (state.queue) de imagens e aos contadores:
current: próxima imagem a ser processadaprocessed: quantidade de imagens já processadasshould_exit: flag para encerramento das threads
done_condpara a espera da thread principal durante o processamentoqueue_condpara a espera das threads trabalhadoras quando a fila esvazia