Вы находитесь на странице: 1из 7

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ

ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное
учреждение высшего образования
«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Инженерная школа информационных технологий и робототехники


Направление «Информатика и ВТ»
Отделение информационных технологий

Лабораторная работа №3 по дисциплине


«ОПЕРАЦИОННЫЕ СИСТЕМЫ»

«Знакомство с потоками и синхронизацией потоков в ОС Unix»

Выполнил:

Студентка группы 8В8А ____________ С. Р. Лобенко

Проверил:

Ассистент ОИТ ____________ Ю. В. Цыганков

Томск 2021
Цель работы
Ознакомиться с подсистемой управления потоками в операционной
системе Unix и основными программными средствами для создания, управления и
удаления потоков.
Задание
1. Ознакомиться с теоретическим материалом.
2. Разработать три многопоточные программы с использованием минимум
двух потоков и различных средств синхронизации. Например, два потока
записывают и читают информацию из одного файла; два потока
увеличивают значение общей переменной; два потока с различной частотой
считывают и записывают данные в общий буфер памяти.
3. Необходимо обеспечить синхронизированную работу потоков в
критической секции с использованием:
 мьютексов;
 семафоров;
 условных переменных.
4. Убедиться в результативности применения средств синхронизации потоков,
сравнив результаты работы программ с использованием и без
использования средств синхронизации.

Ход работы

Компиляция

С++ thread_f.cpp –pthread –o thread_f


1. Многопоточная программа с использованием мьютекса
Листинг программы с использованием мьютекса представлен на рисунке 1.
Результат работы программы представлен на рисунке 2. Чтобы посмотреть, как
работает программа без синхронизации потоков, закомментируем 15 и 27 строки
программы. Результат представлен на рисунке 3.

2
Рисунок 1 – Листинг программы с использованием мьютекса

Рисунок 2 – Результат работы программы с использованием мьютекса

Рисунок 3 – Результат работы программы без использованием мьютекса

3
2. Многопоточная программа с использованием семафора
Листинг данной программы представлен на рисунке 4. Программа считает
количество строк в файле, а затем записывает в него две строки. Когда
используется семафор, первый поток выводит изначальное количество строк в
файле – 3, затем добавляет две строки, и второй поток уже видит в файле 5 строк,
затем так же добавляет две свои (рисунок 5).

Рисунок 4 – Листинг программы с использованием семафора

4
Рисунок 5 – Результат работы программы с использованием семафора
Чтобы увидеть результат работы программы без использования семафора,
закомментируем 34 и 37 строки кода программы. Как мы видим, потоки
одновременно читают файл, поэтому выводят одинаковое количество строк в нем
– 3 (рисунок 6).

Рисунок 6 – Результат работы программы без использования семафора

3. Многопоточная программа с использованием мьютекса и условной


переменной
Листинг данной программы представлен на рисунке 7. В данной
программе управление переключается между двумя потоками, один увеличивает
общую переменную на 1, другой уменьшает на 2. Результат работы программы
представлен на рисунке 8. Результат работы программы без использования
семафора представлен на рисунке 9.

5
Рисунок 7 – Листинг программы с использованием мьютекса и условной
переменной
6
Рисунок 8 – Результат работы программы с использованием мьютекса и условной
переменной

Рисунок 9 – Результат работы программы без использования мьютекса и условной


переменной

Вывод
В ходе выполнения лабораторной работы были изучены основные
программные средства управления потоками ОС Unix, а также способы
синхронизации потоков. Разработаны приложения для многопоточных
вычислений с использованием синхронизации посредством мьютексов,
семафоров и условных переменных.