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

Lab3

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

Лабораторная работа № 3

Студента ИТ 14-1 Красовского Абхая

Базовые механизмы взаимодействия потоков: события и семафоры

Вариант №9

Цель: Получить навыки в следующих предметных областях:

  • создание и использование событий потоками;

  • создание и использование семафоров потоками;

  • особенности освобождения и использования функций ожидания на этих диспетчерских объектах.

Индивидуальное задание

Реализовать задание, полученное в лабораторной работе 1, создать взаимодействие потоков, событий и семафоров.

Код:

#include <iostream>

#include <conio.h>

#include <windows.h>

#include <boost/thread/thread.hpp>

#include <boost/thread/mutex.hpp>

using namespace std;

using namespace boost;

HANDLE hEvent, hEvent2, hSem;

void ThreadFunc()

{

//WaitForSingleObject(hSem, INFINITE);

cout << "Функция потока №1" << endl;

cout << "Делаем первое событие сигнальным" << endl;

SetEvent(hEvent);

//ReleaseSemaphore(hSem, 1, NULL);

}

void ThreadFunc2()

{

//WaitForSingleObject(hSem, INFINITE);

WaitForSingleObject(hEvent, INFINITE);

cout << "Ловим сигнал завершения первого потока через первое событие" << endl;

cout << "Функция потока №2" << endl;

CloseHandle(hEvent);

cout << "Закрываем первое событие и делаем второе сигнальным" << endl;

SetEvent(hEvent2);

//ReleaseSemaphore(hSem, 1, NULL);

}

void main()

{

setlocale(LC_ALL, "rus");

cout << "Начало программы, создание событий и потоков!" << endl;

hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

hEvent2 = CreateEvent(NULL, FALSE, FALSE, NULL);

hSem = CreateSemaphore(NULL, 1, 1, NULL);

thread thr(ThreadFunc);

thread thr2(ThreadFunc2);

thr.join();

thr2.join();

WaitForSingleObject(hEvent2, INFINITE);

cout << "Ловим сигнал о завершении второго потока через второе событие" << endl;

cout << "Закрывааем второе событие" << endl;

CloseHandle(hEvent2);

CloseHandle(hSem);

cout << "Заверешение программы!" << endl;

thr.~thread();

thr2.~thread();

_getch();

}

Результат:

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