их потоків один одним;  
 розробити ряд тестів для перевірки коректності роботи програми. 
  Зв'язний список - структура даних <# "justify"> - головний, не започатковано структуру списку і звільняє після його використання пам'ять; 
  - потік, який додає елементи в список; 
  потік, що видаляє елементи зі списку; 
  потік, що змінює існуючі елементи; 
  потік, який читає інформацію списку (виводить список на екран). 
   .2 Загальний огляд методів реалізації завдання 
   Таким чином, першим етапом написання програми стала реалізація структури списку, а також функцій, що працюють з ним. Головне завдання - синхронізація потоків, що працюють зі списком. Для цього я використала виділення додаткової купи для списку. Це несе в собі ключове сенс: кожен раз, коли який небудь потік отримує доступ до списку (а значить і до купи), то він як критичний розділ блокується, а значить будь-який інший потік, також намагається отримати доступ до списку буде призупинено до моменту його звільнення. Більш того в програмі мною були використані методи забезпечення багатопоточності. p align="justify"> 2. ВИКОНАННЯ ПРОЕКТУ 
				
				
				
				
			   .1 Функціонал кільцевого списку 
   До структурі списку застосовні наступні методи: 
  - InitialList - ініціалізація списку; 
  - AddElem - додавання вузла в кінець списку; 
  EraseElem - видалення елемента зі списку; так як реалізований мною список має всього 2 поля: покажчик на наступний елемент і ціле число (безпосередньо дані), то пошук елемента для його видалення проводиться по цьому самому числу, при еьтом вважається, що елементи в списку не повторюються (для формалізації задачі); 
  ChangeElem - зміна даних вже існуючого вузла; пошук елементи аналогічний пошуку при видаленні; 
  Print - вивід на екран всіх вузлів списку. 
   .2 Опис функцій API для роботи з пулом пам'яті в ОС Windows та їх роль у проекті 
   У постановці завдання є важливий пункт - забезпечення виключення можливості перекриття різних потоків один одним. Реалізовувати його пропонується за допомогою створення під список окремої купи, а всі операції зі списком здійснювати за допомогою функцій API роботи з пулом пам'яті. У своїй програмі я використовувала такі функції: 
  - HeapCreate. Створює додаткове купу в процесі. Приймає 3 параметри: параметр fdwOptions модифікує спосіб виконання операцій над купою. У ньому можна вказати 0, НЕАР_NO_SERIALIZE, НЕАР_GENERATE_EXCEPTIONS, HEAP_CREATE_ENABLE_EXECUTE або ком...