Всего 12 потоков.
10 потоков имитируют 10 элементов. Каждый поток в каждый момент времени
находится в одном из двух состояний (элемент исправен, элемент неисправен),
и меняет свое состояние на противоположное через экспоненциально распреде-
ленное случайное время с матожиданием 1/failure_rate, если элемент исправен,
1/repair_rate, если неисправен. В течение этого случайного времени поток спит.
Если режим отказов Single, то все исправные потоки перед началом наработки
на отказ пытаются захватить мьютекс (специальный исключающий семафор,
его может захватить только один поток, остальные ждут пока не освободиться).
Если режим восстановлений Single, то все неисправные потоки перед началом
наработки на восстановление пытаются захватить другой аналогичный мьютекс.
Отдельный специальный поток работает и собирает статистику и рассчитывает
экспериментальные вероятности путем запроса состояний потоков - элементов
с периодичностью 0,001 сек. Можно чаще, но нет особой нужды, и так успевает,
элементы в среднем меняют состояние раз в 1 секунду при max интенсивности.
Ну и плюс основной поток программы, который запускает и останавливает осталь-
ные потоки, обслуживает интерфейс пользователя, обрабатывает действия пользо-
вателя, и раз в 20 мс по таймеру обновляет отображаемую на экране информацию.
|