Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Синхронизация потоков средствами POSIX

Автор:   •  Август 29, 2019  •  Лабораторная работа  •  1,498 Слов (6 Страниц)  •  361 Просмотры

Страница 1 из 6

1. Цель работы

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

2. Вариант задания

[pic 1]

рис.2.1

3. Программная реализация

#include 

#include 

#include 

#include 

#include 

using namespace std;

#define MAX_SEM_COUNT 4

HANDLE semaphore;

DWORD IDThreadID;

DWORD WINAPI ThreadB(LPVOID i);

DWORD WINAPI ThreadC(LPVOID i);

DWORD WINAPI ThreadD(LPVOID i);

DWORD WINAPI ThreadE(LPVOID i);

DWORD WINAPI ThreadF(LPVOID i);

DWORD WINAPI ThreadG(LPVOID i);

DWORD WINAPI ThreadH(LPVOID i);

DWORD WINAPI ThreadI(LPVOID i);

DWORD WINAPI ThreadK(LPVOID i);

DWORD WINAPI ThreadM(LPVOID i);

DWORD WINAPI ThreadA(LPVOID i) {

        UNREFERENCED_PARAMETER(i);

        WaitForSingleObject(semaphore, INFINITE);

        for (int i = 0; i < 4; i++) {

                cout << "a";

                Sleep(300);

        }

        ReleaseSemaphore(semaphore, 1, NULL);

        // C

        HANDLE threadC = CreateThread(NULL, 0, ThreadC, NULL, 0, &IDThreadID);

        return TRUE;

}

DWORD WINAPI ThreadB(LPVOID i) {

        UNREFERENCED_PARAMETER(i);

        WaitForSingleObject(semaphore, INFINITE);

        for (int i = 0; i < 8; i++) {

                cout << "b";

                Sleep(300);

        }

        ReleaseSemaphore(semaphore, 1, NULL);

        //F

        HANDLE threadF = CreateThread (NULL, 0, ThreadF, NULL, 0, &IDThreadID);

        // H

        HANDLE threadH = CreateThread(NULL, 0, ThreadH, NULL, 0, &IDThreadID);

        return TRUE;

}

DWORD WINAPI ThreadC(LPVOID i) {

        UNREFERENCED_PARAMETER(i);

        WaitForSingleObject(semaphore, INFINITE);

        for (int i = 0; i < 4; i++) {

                cout << "c";

                Sleep(300);

        }

        ReleaseSemaphore(semaphore, 1, NULL);

        // E

        HANDLE threadE = CreateThread(NULL, 0, ThreadE, NULL, 0, &IDThreadID);

        return TRUE;

}

DWORD WINAPI ThreadD(LPVOID i) {

        UNREFERENCED_PARAMETER(i);

        WaitForSingleObject(semaphore, INFINITE);

...

Скачать:   txt (6.2 Kb)   pdf (111.5 Kb)   docx (32 Kb)  
Продолжить читать еще 5 страниц(ы) »
Доступно только на Essays.club