Введение
В этом проекте вы научитесь использовать мютекс для синхронизации печати строк в многопоточной среде. Вы будете модифицировать существующую программу "Беспорядочный Шрифтометр", чтобы обеспечить печать строк в правильной последовательности без смешивания букв.
👀 Предварительный просмотр
$ gcc printer.c -o printer -lpthread
$./printer
helloworld
🎯 Задачи
В этом проекте вы научитесь:
- Как инициализировать мютекс в функции
init() - Как заблокировать и разблокировать мютекс в функции
printer(), чтобы обеспечить эксклюзивный доступ к процессу печати - Как скомпилировать и запустить модифицированную программу, чтобы наблюдать правильный вывод
🏆 Достижения
После завершения этого проекта вы сможете:
- Разобраться в важности мютекса при синхронизации доступа к общими ресурсам в многопоточной программе
- Применить методы блокировки и разблокировки мютекса для координации выполнения нескольких потоков
- Отлаживать и исправлять ошибки в многопоточной программе, чтобы получить ожидаемый вывод
Инициализировать мютекс
В этом шаге вы научитесь инициализировать мютекс в функции init(). Следуйте шагам ниже, чтобы выполнить этот шаг:
- Откройте файл
printer.c, расположенный в директории/home/labex/project/. - В уже имеющемся коде функции
printerмютекс блокируется (pthread_mutex_lock(&mutex)) в начале, чтобы обеспечить эксклюзивный доступ к процессу печати. Как только строка полностью напечатана, мютекс разблокируется (pthread_mutex_unlock(&mutex)), позволяя другому потоку напечатать. - Найдите функцию
init()и добавьте следующий код для инициализации мютекса:
void init()
{
pthread_mutex_init(&mutex, NULL);
}
Это инициализирует переменную mutex с использованием функции pthread_mutex_init(), которая является частью библиотеки POSIX Threads (pthreads). Второй аргумент NULL указывает, что мы используем стандартные атрибуты мютекса.
Компилировать и запускать программу
Теперь, когда вы завершили изменения в файле printer.c, вы можете скомпилировать и запустить программу.
- Откройте терминал и перейдите в директорию
/home/labex/project/. - Скомпилируйте программу с флагом
-lpthread, чтобы связать библиотеку pthreads:
gcc printer.c -o printer -lpthread
- Запустите программу:
./printer
Теперь вы должны увидеть вывод:
helloworld
Строки "hello" и "world" напечатываются последовательно без смешивания букв, как ожидалось.
Поздравляем! Вы успешно модифицировали программу "Беспорядочный Шрифтометр", чтобы она работала как задумано.
Резюме
Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.



