Lab2
.docxЛабораторная работа № 2
Студента ИТ 14-1 Красовского Абхая
Базовые механизмы взаимодействия потоков: функции ожидания на диспетчерских объектах и мьютексы
Вариант №9
Цель: Получить навыки в следующих предметных областях:
-
создание и использование критических секций;
-
создание и использование мьютексов потоками;
-
использование функций ожидания на диспетчерских объектах.
Индивидуальное задание
-
Реализовать задание, полученное в лабораторной работе 1, исходя из следующей схемы создания и взаимодействия потоков и мьютекса, приведенной на рисунке 1.
Код:
#include <iostream>
#include <conio.h>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
using namespace std;
using namespace boost;
mutex tMutex;
int a = 0;
double x = 0, y = 0, t = 0;
void ThreadFunc1()
{
tMutex.lock();
cout << "Работает функция потока №1(считывание данных)" << endl;
cout << "Кардиоида — плоская линия, которая описывается фиксированной точкой окружности, катящейся по неподвижной окружности с таким же радиусом. \n Получила своё название из-за схожести своих очертаний со стилизованным \n изображением сердца. \n Кардиоида является частным случаем улитки Паскаля, \n эпициклоиды и синусоидальной спирали.\n a - радиус окружностей, t -угол" << endl;
cout << "Введите a" << endl;
cin >> a;
cout << "Введите t(от 0 до 360)" << endl;
while (!(cin >> t) || (t > 360) || (t < 0)) cout << "Неправильный ввод, попробуйте еще раз" << endl;
cout << "Выход из потока №1" << endl;
tMutex.unlock();
}
void ThreadFunc2()
{
tMutex.lock();
cout << "Работает функция потока №2(вычисление и вывод данных)" << endl;
x = 2 * a * cos(t) - a * cos(2 * t);
y = 2 * a * sin(t) - a * sin(2 * t);
cout << "x = " << x << endl << "y = " << y << endl;
cout << "Выход из потока №2" << endl;
tMutex.unlock();
}
void main()
{
setlocale(LC_ALL, "rus");
cout << "Сообщение потока Main(начало работы программы)" << endl;
thread t1(ThreadFunc1);
thread t2(ThreadFunc2);
t1.join();
t2.join();
cout << "Сообщение потока Main(программа завершилась)" << endl;
_getch();
}
Результат: