Introdução
Neste projeto, você aprenderá como usar mutex para sincronizar a impressão de strings em um ambiente multi-threaded. Você modificará um programa "Chaotic Typewriter" existente para garantir que as strings sejam impressas na sequência correta, sem qualquer mistura de letras.
👀 Visualização
$ gcc printer.c -o printer -lpthread
$ ./printer
helloworld
🎯 Tarefas
Neste projeto, você aprenderá:
- Como inicializar um mutex na função
init() - Como bloquear (lock) e desbloquear (unlock) o mutex na função
printer()para garantir acesso exclusivo ao processo de impressão - Como compilar e executar o programa modificado para observar a saída correta
🏆 Conquistas
Após concluir este projeto, você será capaz de:
- Entender a importância do mutex na sincronização do acesso a recursos compartilhados em um programa multi-threaded
- Aplicar técnicas de bloqueio (locking) e desbloqueio (unlocking) de mutex para coordenar a execução de múltiplos threads
- Solucionar problemas e corrigir questões em um programa multi-threaded para obter a saída desejada
Inicializar o Mutex
Nesta etapa, você aprenderá como inicializar o mutex na função init(). Siga os passos abaixo para completar esta etapa:
- Abra o arquivo
printer.clocalizado no diretório/home/labex/project/. - No código já fornecido para a função
printer, o mutex é bloqueado (locked) (pthread_mutex_lock(&mutex)) no início para garantir acesso exclusivo ao processo de impressão. Uma vez que a string é totalmente impressa, o mutex é desbloqueado (unlocked) (pthread_mutex_unlock(&mutex)), permitindo que o outro thread imprima. - Localize a função
init()e adicione o seguinte código para inicializar o mutex:
void init()
{
pthread_mutex_init(&mutex, NULL);
}
Isso inicializa a variável mutex usando a função pthread_mutex_init(), que faz parte da biblioteca POSIX Threads (pthreads). O segundo argumento NULL especifica que estamos usando os atributos de mutex padrão.
Compilar e Executar o Programa
Agora que você concluiu as modificações no arquivo printer.c, você pode compilar e executar o programa.
- Abra um terminal e navegue até o diretório
/home/labex/project/. - Compile o programa com a flag
-lpthreadpara vincular a biblioteca pthreads:
gcc printer.c -o printer -lpthread
- Execute o programa:
./printer
Você agora deve ver a saída:
helloworld
As strings "hello" e "world" são impressas em sequência, sem qualquer mistura das letras, como esperado.
Parabéns! Você modificou com sucesso o programa "Chaotic Typewriter" para funcionar conforme o esperado.
Resumo
Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.



