Sincronizar Impressão Multithread com Mutex

CBeginner
Pratique Agora

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:

  1. Abra o arquivo printer.c localizado no diretório /home/labex/project/.
  2. 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.
  3. 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.

  1. Abra um terminal e navegue até o diretório /home/labex/project/.
  2. Compile o programa com a flag -lpthread para vincular a biblioteca pthreads:
gcc printer.c -o printer -lpthread
  1. 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.

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar