процесу. Потік використовує код і дані батьківського процесу, але має свій власний унікальний стек і стан процесора, що включає покажчик команд. p align="justify"> Потоки часто стають джерелами програмних помилок особливого роду. Ці помилки виникають при використанні потоками поділюваних ресурсів системи (наприклад, загального адресного простору) і є окремим випадком більш широкого класу помилок - помилок синхронізації. Якщо завдання розділена між незалежними процесами, то доступом до їх загальних ресурсів управляє операційна система і ймовірність помилок через конфлікти доступу знижується. Найважливіша перевага потоків перед самостійними процесами полягає в тому, що накладні витрати на створення нового потоку в багатопотоковому додатку виявляються нижче, ніж накладні витрати на створення нового самостійного процесу. Рівень контролю над потоками в багатопотоковому додатку вище, ніж рівень контролю додатки над дочірніми процесами. Крім того, багатопотокові програми не схильні залишати за собою вервечки "осиротілих" незалежних процесів. Для породження дочірнього процесу, перебуваючи в батьківській програмі, потік отримує копії віртуальної пам'яті дескрипторів файлів і пр. Модифікації вмісту пам'яті, закриття файлів та інші подібні дії в дочірньому процесу не впливають на роботу батьківського процесу і навпаки. З іншого боку, коли програма створює потік, нічого не копіюється. Обидва потоку - старий і новий - мають доступ до спільного віртуального простору, загальним дескрипторах файлів і іншої системних ресурсів. Якщо, наприклад, один потік змінює значення змінної, це зміна відбивається на іншому потоці. Точно так само, коли один потік закриває файл, другий потік втрачає можливість працювати з цим файлом. br/>
1. КОНЦЕПЦІЯ багатопоточність
Фундаментальними поняттями, пов'язаними з багатопоточним програмуванням, є В«процесВ» (process) і В«потікВ» (thread). Для ефективного багатопотокового програмування необхідно досить добре бачити різницю між даними термінами. p align="justify"> Важливу роль в паралельному програмуванні грає поняття процесу. Процесом часто називають екземпляр виконання програми. І, часом, здається, що поняття процесу і програми практично однакові, але насправді вони відрізняться на фундаментальному рівні. Якщо програма являє собою статичний набір команд, то процес є набором ресурсів і даних, що використовуються у ході виконання програми. p align="justify"> Іншим фундаментальним поняттям є потік. Під потоком розуміють якусь сутність всередині процесу, що відповідає за виконання коду, що міститься в адресному просторі процесу. У кожному процесі є мінімум один потік (первинний), який автоматично створюється системою в момент виникнення процесу. Далі первинний потік може породжувати інші потоки, а ті в свою чергу нові і так далі. p align="justify"> Потоки, що працюють паралельно в одному процесі, поділяють не тільки адресний простір, але і відкриті файли,...