Este projeto é uma simulação de controle de trens utilizando threads e sincronização por meio de mutexes e semáforos. Foi desenvolvido com Qt e implementa regiões críticas para gerenciar acessos simultâneos de forma segura.
├── ATVD2.pro
├── ATVD2.pro.user
├── README.md
├── globals.h
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
├── mainwindow.ui
├── trem.cpp
└── trem.h
-
Simulação de Trens
- Cada trem é representado por uma thread (
Trem
) e se move continuamente pela interface gráfica. - Controles individuais de velocidade para cada trem.
- Cada trem é representado por uma thread (
-
Gerenciamento de Regiões Críticas
- Regiões críticas compartilhadas são protegidas por QMutex.
- A sincronização garante exclusão mútua, prevenindo colisões.
-
Interface Gráfica (GUI)
- Desenvolvida com Qt Widgets.
- Visualização em tempo real da movimentação dos trens.
- Controle de velocidade por meio de sliders.
- Qt Creator (versão 6.6.0 ou superior).
- Qt Framework com suporte ao módulo Widgets.
-
Clone o repositório:
git clone <URL_DO_REPOSITORIO> cd <DIRETORIO_DO_REPOSITORIO>
-
Abra o arquivo
ATVD2.pro
no Qt Creator. -
Compile e execute o projeto.
- Use os sliders disponíveis para ajustar a velocidade de cada trem individualmente.
Declaração de variáveis globais:
extern QSemaphore semaforosRC[7]; // Semáforos usados nas regiões críticas.
Arquivo de entrada principal da aplicação:
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Controlam a interface gráfica e gerenciam eventos:
- Conexão de sinais entre trens e interface.
- Atualização dinâmica das posições dos trens na GUI.
Implementação das threads para cada trem:
- Lógica de movimentação contínua baseada em coordenadas.
- Bloqueio e desbloqueio de regiões críticas utilizando
QMutex
.
Definição da interface gráfica:
- Layout dos componentes da interface, como sliders e labels para visualização.
-
Sincronização:
- Uso de mutexes para proteger regiões críticas compartilhadas por mais de um trem.
- Acesso sequencial garantido para evitar condições de corrida e colisões.
-
Ajuste de Velocidade:
- Velocidade ajustável dinamicamente pelos sliders da interface.
- A pausa das threads é inversamente proporcional ao valor da velocidade configurada.
-
Extensibilidade:
- O código pode ser adaptado para adicionar novos trens ou regiões críticas, desde que adequadamente configurados.
- Faça um fork do projeto.
- Crie uma nova branch para a sua contribuição:
git checkout -b minha-feature
- Realize suas alterações e faça commit:
git commit -m "Descrição das alterações realizadas"
- Envie a branch para o repositório remoto:
git push origin minha-feature
- Abra um Pull Request no repositório principal.
Este projeto está licenciado sob a Licença MIT.