Мета роботи

Мета роботи

Вивчити методи керування потоками, які використовують загальні ресурси.

 

9.2 Підготовка до роботи і порядок її виконання

1. Необхідно вивчити функції створення потоків: CreateThread та _beginthreadex.

HANDLE CreateThread(

LPSECURITY_ATTRIBUTES SecurityAttributes, // Атрибути безпеки

DWORD StackSize, // Розмір стека

LPTHREAD_START_ROUTIN StartFunction, //Потокова функція

LPVOID ThreadParameter, // Параметр потокової функції

DWORD CreationFlags, // Прапорці створення потоку

LPDWORD ThreadId // Ідентифікатор потоку

);

 

uintptr_t _beginthreadex(

void *security, // Атрибути безпеки

unsigned stack_size, Розмір стека

unsigned ( *start_address )( void * ), // Потокова функція

void *arglist, // Параметр потокової функції

unsigned initflag, // Прапорці створення потоку

unsigned *thrdaddr // Ідентифікатор потоку

);

1 Скласти універсальний макрос для створення потоків;

2 Скласти програму, у якій 2 потоки пишуть у чергу рядки і 2 потоки читають із черги рядки, що були туди записані раніше. Після читання рядки мають бути видалені із черги. Розмір черги - не більше N елементів. Використовується загальна черга для всіх 4- х потоків.

3 Для програми, складеної в попередньому пункті, забезпечити можливість однократного запуску цієї програми.

4 Скласти програму для філософів, що обідають, якщо число філософів N, кількість циклів, що має виконати кожен із філософів M. Для потоків використовується одна програма (на чотири) і потоки з різних програм (на п'ять).

9.3 Зміст звіту

У звіт мають бути включені всі складені програми й обґрунтування використаних засобів синхронізації.

9.4 Контрольні питання й завдання

1. У якому випадку рекомендується використовувати для організації потоків функцію _begіnthreadex?

2. У якому випадку необхідна синхронізація потоків?

3. Які засоби синхронізації Ви знаєте для потоків одного процесу?

4. Які засоби синхронізації не можна використовувати для потоків різних процесів і чому?

5. У чому полягає різниця між критичною секцією і мьютексом?

 

11.

 

10 СИНХРОНІЗАЦІЯ ПРОЦЕСІВ І ПОТОКІВ

Вивчити об'єкти операційної системи для синхронізації процесів і методику їхнього використання

10.2 Підготовка до роботи і порядок її виконання

1. Вивчити особливості створення й завершення процесів, їх призначення, процеси-нащадки і властивості, що отримуються у спадок від процеса-батька (конспект лекцій, файл WІN32.HLP);

2. Вивчити потоки, способи їх створення і завершення (конспект лекцій, файл WIN32.HLP);

3. Вивчити розподіл часу між потоками і можливості програміста по керуванню цим розподілом. Пріоритетне обслуговування потоків (конспект лекцій, файл WIN32.HLP);

4. Вивчити способи синхронізації потоків (конспект лекцій, файл WIN32.HLP):

- без операційної системи (конспект лекцій, файл WIN32.HLP);

- за допомогою критичних секцій (конспект лекцій, файл WIN32.HLP);

5. Вивчити засоби синхронізації процесів (конспект лекцій, файл WIN32.HLP):

- м'ютекси;

- семафори;

- таймери, що очкуються.

6. Скласти програму, в якої необхідно:

- запустити довільний текстовий редактор;

- створити в цьому редакторі 2 файли;

- Завершити роботу редактора після створення файлів;

- створити 2 потоки;

- у кожному потоці впорядкувати файли, створені в редакторі;

- на початку сортування кожного файлу видати повідомлення про початок сортування;

- наприкінці сортування кожного файлу видати повідомлення про кінець сортування;

- після упорядкування обох файлів знищити потоки;

- перевірити створені файли.

 

10.3 Зміст звіту

1. Тексти програм з усіма способами синхронізації потоків і процесів;

2. По кожному способі синхронізації достоїнства й недоліки в порівнянні з іншими способами;

3. Висновки й рекомендації з використання способів синхронізації при рішенні конкретних завдань.

 

10.4 Контрольні питання й завдання

1. У чому різниця між процесами й потоками?

2. Навіщо необхідно синхронізувати потоки?

3. Які способи синхронізації потоків ви знаєте?

4. Покажіть на прикладі своєї програми, що буде, якщо не використати синхронізацію.

5. Навіщо необхідно синхронізувати процеси?

6. Які способи синхронізації процесів ви знаєте?

7. Покажіть на прикладі своєї програми, що буде, якщо не використати синхронізацію.

8. У чому особливість синхронізації за допомогою подій? приведіть приклади.