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


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


Рис. 1. Печать только изменений значения

Можно предположить, что в протоколе работы программы отражено только изменение значение счетчиков (см. также код "тренера"). Попробуем в этом убедиться:

Эксперимент 1. Внесем небольшое изменение в код "тренера", чтобы он выводил значения счетчиков "бегунов" на каждом шаге своей итерации. В результате получим следующий протокол работы программы, который представлен на рис. 2.


Рис. 2. Вывод на каждой итерации цикла печати.

Легко видеть, что, получив в свое распоряжение процессор, "тренер" выводит многократно текущие значения счетчиков шагов. Последние не изменяются, т.к. оба "бегуна" простаивают из-за того, что цикл процессора захвачен монопольно "тренером". По числу повторений можно определить число итераций, которые успевает сделать "тренер" в пределах выделенного ему времени процессора.

Эксперимент 2. Вставим в цикл "бегуна", прерывание, которое инициирует выход в ядро операционной системы (вызов функции Sleep с нулевым значение параметра "засыпания").

Так мы "насильно" изменим квантование процессора. Дело в том, что пропуски и/или повторы в отображении текущего значения счетчиков происходят потому, что "бегуны" успевают сделать достаточное число шагов, прежде чем тренер начнет выводить их текущее значение.

Примечание 1. То, что значения счетчиков разные на одном и том же шаге - такте дискретного времени, тоже непорядок. Ведь спортсмены начали бежать одновременно и бегут с одинаковой скоростью.

В результате получим протокол работы программы, который показан на рис.3. Из него видно, что теперь отображается каждый шаг бегуна/бегунов.


Рис. 3. Вставка Sleep в тело цикла "бегунов"

Примечание 2. Т.к. вывод данных резко увеличил время работы программы, то, чтобы оно имело приемлемое для нас значение, мы взяли меньшее число шагов (ср. время работы программы на рис. 1 и рис.3 с общим числом выполненных шагов). Кстати, так можно оценить время, затрачиваемое на вывод данных.

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


Начало  Назад  Вперед