Программа на потоки
Задание на программу:
Разработать многопоточную программу, демонстрирующую решение приведённой ниже задачи, используя объекты синхронизации и функции ожидания (описаны в прилагающейся статье).
Условия задачи:
Представьте, что вы стали участником игры, в которой вы находитесь перед тремя дверями. Ведущий, о котором известно, что он честен, поместил за одной из дверей автомобиль, а за двумя другими дверями — по козе. У вас нет никакой информации о том, что за какой дверью находится. Ведущий говорит вам: «Сначала вы должны выбрать одну из дверей. После этого я открою одну из оставшихся дверей, за которой находится коза. Затем я предложу вам изменить свой первоначальный выбор и выбрать оставшуюся закрытую дверь вместо той, которую вы выбрали вначале. Вы можете последовать моему совету и выбрать другую дверь, либо подтвердить свой первоначальный выбор. После этого я открою дверь, которую вы выбрали, и вы выиграете то, что находится за этой дверью.»
НАПРИМЕР.
Вы выбираете дверь номер A. Ведущий открывает дверь номер B и показывает, что за ней находится коза. Затем ведущий предлагает вам выбрать дверь номер C. Увеличатся ли ваши шансы выиграть автомобиль, если вы последуете его совету?
Требования:
1. Игроку и ведущему должны соответствовать собственные потоки (threads).
2. Во время проведения серии экспериментов потоки не должны прерываться.
3. Информация о том, что находится за каждой из дверей, должна храниться в локальных переменных функции потока "ведущего".
4. Обмен информацией через глобальные переменные между потоками должен быть синхронизирован с помощью объектов синхронизации и функций ожидания.
Требования к интерфейсу программы:
1. Должны быть предусмотрены возможности: начать эксперимент, приостановить, прервать, возобновить.
Или, иначе, предварительно задать количество опытов.
2. Должна быть предусмотрена возможность выбрать одну из двух стратегий для игрока: постоянно подтвержать свой первоначальный выбор, постоянно менять свой выбор.
3. Должна выводиться полная информация о текущих значениях результата эксперимента (количество игр, количество выигрышей, количество проигрышей, расчётная вероятность выигрыша, расчётная вероятность проигрыша).
Visual Studio C++
Срок 3 дня