Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Взаємодія між потоками

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
КН
Кафедра:
Кафедра електронних обчислювальних машин

Інформація про роботу

Рік:
2018
Тип роботи:
Лабораторна робота
Предмет:
Системне програмне забезпечення
Варіант:
1 10 13

Частина тексту файла

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Інститут комп’ютерних технологій, автоматики та метрології Кафедра електронних обчислювальних машин ЗВІТ З лабораторної роботи №2 з дисципліни: «Системне програмне забезпечення» на тему: «Взаємодія між потоками» Варіант №1 Львів – 2018 Мета роботи : Засвоїти поняття паралельного виконання «потоків» та освоїти засоби їх синхронізації. Здобути навики синхронізації «потоків» при обробці спільних даних та доступу до ресурсів в операційній системі Windows. Теоретичні відомості Windows надає чотири об’єкти, призначені для синхронізації потоків і процесів. Три з них — мютекси, семафори і події — є об’єктами ядра, що мають дескриптори. Події використовуються також для інших цілей, наприклад, для асинхронного уведення-виведення. Об’єкт критичної ділянки коду — це ділянка програмного коду, який кожного разу повинен виконуватися тільки одним потоком; паралельне виконання цієї ділянки декількома потоками може приводити до непередбачуваних або невірних результатів. Об’єкт взаємного виключення (mutual exception), або мютекс (mutex), забезпечує більш універсальну функціональність в порівнянні з об’єктом CRITICAL_SECTION. Оскільки мютекси можуть мати імена і дескриптори, їх можна використовувати також для синхронізації потоків, що належать різним процесам. Так, два процеси, що розділяють спільну пам’ять за допомогою відображення файлів, можуть використовувати мютекси для синхронізації доступу до областей пам’яті, що розділяються. Об’єкти другого з трьох згаданих на початку типів об’єктів синхронізації ядра — семафори (semaphores), підтримують лічильники, і коли значення цього лічильника більше 0, об’єкт семафора знаходиться в сигнальному стані. Якщо ж значення лічильника стає нульовим, об’єкт семафора переходить в несигнальний стан. Варіант завдання / Код програми #include <windows.h> #include <stdio.h> #include <process.h> #define THREADCOUNT 2 #define ARRAYSIZE 10 unsigned _stdcall ChangeArray(void *); unsigned _stdcall PrintArray(void *); int array[ARRAYSIZE]; CRITICAL_SECTION critical_sec; HANDLE hSemaphore; HANDLE ghMutex; DWORD WINAPI WriteToDatabase(LPVOID); int main(void) { HANDLE aThread[THREADCOUNT]; InitializeCriticalSection(&critical_sec); unsigned int threadId = 0; for (int i = 0; i < ARRAYSIZE; i++) { array[i] = i + 1; } printf("Critical Section\n"); aThread[0] = (HANDLE)_beginthreadex(NULL, 0, &PrintArray, NULL, 0, &threadId); Sleep(50); aThread[1] = (HANDLE)_beginthreadex(NULL, 0, &ChangeArray, NULL, 0, &threadId); Sleep(50); /*aThread[2] = (HANDLE)_beginthreadex(NULL, 0, &PrintArray, NULL, 0, &threadId); Sleep(100);*/ for (int i = 0; i < THREADCOUNT; i++) CloseHandle(aThread[i]); DeleteCriticalSection(&critical_sec); // Закрити потік //////////////////////////////////////////////////////////// //HANDLE aThread[THREADCOUNT]; printf("Mutex\n"); DWORD ThreadID; int i; // Create a mutex with no initial owner ghMutex = CreateMutex( NULL, // default security attributes FALSE, // initially not owned NULL); // unnamed mutex if (ghMutex == NULL) { printf("CreateMutex error: %d\n", GetLastError()); return 1; } // Create worker threads for (i = 0; i < THREADCOUNT; i++) { aThread[i] = CreateThread( NULL, // default security attributes 0, // default stack size (LPTHREAD_START_ROUTINE)WriteToDatabase, NULL, // no thread function arguments 0, // default creation flags &ThreadID); // receive thread identifier if (aThread[i] == NULL) { printf("CreateThread error: %d\n", GetLastError()); return 1; } } // Wait for all threads to terminate WaitForMultipleObjects(THREADCOUNT, aThread, TRUE, INFINITE); // Закрити потік for (i = 0; i < THREADCOUNT; i++) CloseHandle(aThread[i]); system("PAUSE"); CloseHandle(ghMutex); return 0; } unsigned _stdcall PrintArray(void *) { EnterCriticalSection(...
Антиботан аватар за замовчуванням

17.05.2019 20:05

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини