ож неоптимальність планування без обширної (і дорогий) координації між користувальницьким планувальником і планувальником ядра. br/>
. Практична частина
.1 Взаємодія потоків
У багатопотокової середовищі часто виникають проблеми, пов'язані з використанням паралельно виконуваними потоками одних і тих же даних або пристроїв. Для вирішення подібних проблем використовуються такі методи взаємодії потоків, як взаимоисключения (м'ютекси), семафори, критичні секції і події. p align="justify">. взаимоисключения (mutex, м'ютекс) - це об'єкт синхронізації, який встановлюється в особливе сигнальний стан, коли не зайнята яких-небудь потоком. Тільки один потік володіє цим об'єктом у будь-який момент часу, звідси і назва таких об'єктів (від англійського mutually exclusive access - взаємно виключає доступ) - одночасний доступ до загального ресурсу виключається. Після всіх необхідних дій м'ютекс звільняється, надаючи іншим потокам доступ до загального ресурсу. Об'єкт може підтримувати рекурсивний захоплення вдруге тим же потоком, збільшуючи лічильник, що не блокуючи потік, і вимагаючи потім багаторазового звільнення. Такий, наприклад, mutex в Win32 і KMUTEX в ядрі Windows. Проте є й такі реалізації, які не підтримують таке і призводять до взаємної блокуванні потоку при спробі рекурсивного захоплення. Це FAST_MUTEX в ядрі Windows і критична секція в Win32.
. Семафори являють собою доступні ресурси, які можуть бути придбані декількома потоками в один і той же час, поки пул ресурсів не спорожніє. Тоді додаткові потоки повинні чекати, поки необхідну кількість ресурсів не буде знову доступно. Семафори дуже ефективні, оскільки вони дозволяють одночасний доступ до ресурсів. Семафор є логічне розширення мьютекса - семафор з лічильником 1 еквівалентний м'ютексів, але лічильник може бути і більше 1.
. Події. Об'єкт, що зберігає в собі 1 біт інформації В«просигналізувало чи ніВ», над яким визначено операції В«просигналізуватиВ», В«скинути в непросігналізірованное станВ» і В«чекатиВ». Очікування на просигналізувало подію є відсутність операції з негайним продовженням виконання потоку. Очікування на непросігналізірованном подію призводить до призупинення виконання потоку до тих пір, поки інший потік (або ж друга фаза обробника переривання в ядрі ОС) НЕ просигналізує подія. Можливе очікування кількох подій в режимах В«будь-якогоВ» або В«всіхВ». Можливо також створення події, автоматично скидається в непросігналізірованное стан після пробудження першого ж - і єдиного - що очікує потоку (такий об'єкт використовується як основа для реалізації об'єкта В«критична секціяВ»). Активно використовуються в MS Windows, як в режимі користувача, так і в режимі ядра. Аналогічний об'єк...