Page 76 - 4989
P. 76
ручне скидання і викликати функцію ResetEvent після того, як всі
потоки виконали обробку.
Для простих операцій з глобальними змінними, такими як
інкремент, декремент, присвоєння, додавання і віднімання, можна
обійтися без об’єктів синхронізації, якщо застосувати атомарні
функції (Interlocked-функції): InterlockedIncrement,
InterlockedDecrement, InterlockedExchangeAdd та ін. (детальніше
про атомарні функції див. https://msdn.microsoft.com/en-
us/library/windows/desktop/ms684122%28v=vs.85%29.aspx). Ці
функції гарантують, що під час виконання операції над змінною
потік не буде витіснений, і лише один логічний процесор буде
мати доступ до змінної. Наприклад, операцію з глобальною
змінною
N+=delta;
для гарантування її цілісності при багатопоточній обробці
можна замінити на
InterlockedExchangeAdd(&N, delta);
Детальну інформацію по функціям для роботи з об’єктами
синхронізації можна знайти за посиланням
https://msdn.microsoft.com/en-
us/library/windows/desktop/ms686360%28v=vs.85%29.aspx
7.4 Порядок виконання роботи
1. Проаналізувавши завдання, визначити, чи потрібно
застосовувати в програмі об’єкти синхронізації і які саме.
2. Створити консольний проект.
3. Написати програму для реалізації індивідуального
завдання. Забезпечити вивід на екран інформації, яка
відображає хід виконання програми.
4. Виконати відлагодження програми. Якщо для наведених у
завданні значень розміру масиву програма виконується
надто швидко або надто повільно, варто змінити розмір
так, щоб час виконання становив 5...10 секунд.
76