Добавил:
abhai2013@gmail.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab2

.docx
Скачиваний:
2
Добавлен:
30.06.2018
Размер:
144 Кб
Скачать

Лабораторная работа № 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();

}

Результат:

Соседние файлы в предмете Операционные системы