Средства разработки приложений


Создание и тестирование многопоточной программы - часть 4


если вставить вызов Sleep в каждую итерацию цикла печати и немного увеличить заданное число шагов, то получим еще один протокол (рис. 4). Видно, что по каким-то причинам выводится значения до 66-го шага, а не все 100 шагов, как ожидалось.


Рис. 4. Вставка Sleep в тело цикла "тренера"

Эксперимент 3. Проведем эксперимент, запустив программу вне среды визуального проектирования. Два варианта исполняемых программных модули, созданных в проектах типа Release и Debug, при одном и том же значении максимального числа шагов показывают, как мы видим из протоколов, показанных на рис. 5, 6, разные "картинки". Более того, эти картинки отличаются и от результата работы программы под управлением среды проектирования, который ранее был представлен протоколом на рис.1.


Рис.5. Вне среды, режим Release


Рис.6. Вне среды, режим Debug

Эксперимент 4.. Совсем простой эксперимент: если мы повторно запустим программу, например, в режиме Debug, то увидим уже другие результаты работы. Они представлены на рис. 7


Рис.7. Повторный запуск (режим Debug).

Таким образом, последний эксперимент с многопоточной программой убеждает, что не надо даже и вносить изменения в программный код, чтобы получить результат работы программы, который отличается от предыдущего ее запуска.

Мир - удивителен! Но еще большее удивление можно испытать от непредсказуемой работы многопоточных программ! Зная об этом, с этим можно бороться тем или иным образом, но результат такой "борьбы" и есть то сложное и трудоемкое многопоточное программирование. Но самое опасное, что и это не дает полной гарантии от непредсказуемого (случайного) поведения подобных программ, поскольку такое поведение - одна из особенностей многопоточной модели параллельных вычислений.


Начало  Назад