русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Проблеми синхронізації потоків.


Дата добавления: 2015-07-09; просмотров: 455; Нарушение авторских прав


На жаль, простота створення потоків часом "компенсується" складністю їх застосування. Дві типові проблеми, з якими програміст може зіткнутися при роботі з потоками, - це тупики (deadlocks) і гонки (race conditions). Тупік. Тупики мають місце, коли потік чекає ресурс, який в даний момент належить іншому потоку. Розглянемо приклад. Потік 1 захоплює ресурс А, і для того щоб продовжувати роботу, чекає можливості захопити ресурс Б. У той же час Потік 2 захоплює ресурс Б і чекає можливості захопити ресурс А. Розвиток цього сценарію заблокує обоє потоку; жоден з них не виконуватиметься. Ресурсами можуть виступати будь-які спільно використовуються об'єкти системи - файли, масиви в пам'яті, пристрої введення / виводу і т. п. Гонки
Ситуація гонок виникає, коли два або більше потоку намагаються отримати доступ до загального ресурсу і змінити його стан. Розглянемо наступний приклад. Нехай Потік 1 отримав доступ до ресурсу і змінив його в своїх інтересах; потім активізувався Потік 2 і модифікував цей же ресурс до завершення Потоку 1. Потік 1 вважає, що ресурс залишився у тому ж стані, в якому був до перемикання. Залежно від того, коли саме був змінений ресурс, результати можуть змінюватись - іноді код буде виконуватися нормально, іноді ні Inc (i); if i = iSomething then DoSomething; Тут i - глобальна змінна, доступна з обох потоків. Нехай два або більше потоків виконують цей код одночасно. Потік 1 інкрементував значення змінної i і хоче перевірити її значення для виконання тих чи інших умов. Але тут активізується інший потік, який ще збільшує значення i. У результаті перший потік "проскакує" повз умови, яка, здавалося б, мало бути виконано.



<== предыдущая лекция | следующая лекция ==>
Синхронізація потоків: навіщо це потрібно, які є для цього засоби? | Динамічний обмін даними (що це?, термінологія, способи виконання).


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.053 сек.