Introducción
En este proyecto, aprenderás a usar un mutex para sincronizar la impresión de cadenas en un entorno multihilo. Modificarás un programa existente de "Teclado Caótico" para garantizar que las cadenas se impriman en el orden correcto sin ningún mezclado de letras.
👀 Vista previa
$ gcc printer.c -o printer -lpthread
$./printer
helloworld
🎯 Tareas
En este proyecto, aprenderás:
- Cómo inicializar un mutex en la función
init() - Cómo bloquear y desbloquear el mutex en la función
printer()para garantizar un acceso exclusivo al proceso de impresión - Cómo compilar y ejecutar el programa modificado para observar la salida correcta
🏆 Logros
Después de completar este proyecto, podrás:
- Comprender la importancia del mutex en la sincronización del acceso a recursos compartidos en un programa multihilo
- Aplicar técnicas de bloqueo y desbloqueo de mutex para coordinar la ejecución de múltiples hilos
- Detectar y corregir problemas en un programa multihilo para obtener la salida deseada
Inicializar el Mutex
En este paso, aprenderás a inicializar el mutex en la función init(). Sigue los pasos siguientes para completar este paso:
- Abre el archivo
printer.cubicado en el directorio/home/labex/project/. - En el código ya dado para la función
printer, el mutex se bloquea (pthread_mutex_lock(&mutex)) al principio para garantizar un acceso exclusivo al proceso de impresión. Una vez que se ha impreso completamente la cadena, el mutex se desbloquea (pthread_mutex_unlock(&mutex)), lo que permite a otro hilo imprimir. - Localiza la función
init()y agrega el siguiente código para inicializar el mutex:
void init()
{
pthread_mutex_init(&mutex, NULL);
}
Esto inicializa la variable mutex utilizando la función pthread_mutex_init(), que es parte de la biblioteca de hilos POSIX (pthreads). El segundo argumento NULL especifica que estamos utilizando los atributos predeterminados del mutex.
Compilar y ejecutar el programa
Ahora que has completado las modificaciones al archivo printer.c, puedes compilar y ejecutar el programa.
- Abre una terminal y navega hasta el directorio
/home/labex/project/. - Compila el programa con la bandera
-lpthreadpara enlazar la biblioteca de pthreads:
gcc printer.c -o printer -lpthread
- Ejecuta el programa:
./printer
Ahora deberías ver la salida:
helloworld
Las cadenas "hello" y "world" se imprimen en secuencia sin ningún mezclado de las letras, como se esperaba.
¡Felicidades! Has modificado con éxito el programa "Teclado Caótico" para que funcione como se pretendía.
Resumen
¡Felicidades! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.



