ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Модель использования семафоров. ПримерПусть буферный пул состоит из N буферов, каждый из которых может содержать одну запись. Поток-производитель осуществляет запись в буфер, а поток-потребитель – чтение из буфера. В общем случае поток-производитель и поток-потребитель могут иметь различные скорости и обращаться к буферному пулу с переменой интенсивностью, В один период скорость записи может превышать скорость чтения, в другой - наоборот. Для правильной совместной работы поток-производитель должен приостанавливаться, когда все буферы оказываются занятыми, и активизироваться при освобождении хотя бы одного буфера. Напротив, поток-потребитель должен приостанавливаться, когда все буферы пусты, и активизироваться при появлении хоти бы одной записи. Введем два семафора: е — число пустых буферов, и f — число заполненных буферов, причем в исходном состоянии е = N, a f = 0. Тогда работа потоков с общим буферным пулом может быть описана следующим образом (рис.1). Поток-производитель прежде всего выполняет операцию Р(е), с помощью которой он проверяет, имеются ли в буферном пуле незаполненные буферы. В соответствии с семантикой операции Р, если семафор е равен 0 (т.е. свободных буферов в данный момент нет), то поток-производитель переходит в состояние ожидания. Если же значением е является положительное число, то он уменьшает число свободных буферов, записывает данные в очередной свободный буфер и после этого наращивает число занятых буферов операцией V(f). Поток-потребитель действует аналогичным образом, с той разницей, что он начинает работ у с проверки наличия заполненных буферов, а после чтения данных наращивает количество свободных буферов.
Задание Написать в среде Microsoft Visual Studio 2010 C++ приложение, которое создает один или несколько потоков(зависит от варианта), которые используют объект синхронизации семафор. Варианты 1. Создать 2 потока: поток 1 и поток 2. Создать 2 семафора с именами «SEMAPHORE5» (максимальное значением счетчика 3) и «SEMAPHORE6» (максимальное значением счетчика 5). Поток 1 занимает SEMAPHORE5 2 раза и SEMAPHORE6 2 раз, поток 2 занимает SEMAPHORE5 1 раз и SEMAPHORE6 3 раза. Главный поток ждет освобождения одного из двух семафоров. 2. Создать 2 потока: поток 1 и поток 2. Создать семафор с именем «SEMAPHORE16» с максимальным значением счетчика 5. Поток 1 занимает семафор 2 раза, освобождает через 3 секунду, поток 2 занимает семафор 3 раза, освобождает через 4 секунды. Главный поток пытается занять семафор 5 раз. 3. Создать 2 потока: поток 1 и поток 2. Создать семафор с именем «SEMAPHORE17» с максимальным значением счетчика 4. Главный поток занимает семафор 3 раза, освобождает через 1 секунду, поток 1 занимает семафор 1 раз, освобождает через 4 секунды. Поток 2 пытается занять семафор 4 раза. 4. Создать 2 потока: поток 1 и поток 2. Создать семафор с именем «SEMAPHORE2» с максимальным значением счетчика 7. Поток 1 занимает семафор 4 раза, поток 2 занимает семафор 4 раза. Главный поток ждет освобождения семафора. Через 4 секунды потоки полностью освобождают. 5. Создать 2 потока: поток 1 и поток 2. Создать 2 семафора с именами «SEMAPHORE9» (максимальное значением счетчика 4) и «SEMAPHORE10» (максимальное значением счетчика 2). Главный поток занимает SEMAPHORE9 3 раза и SEMAPHORE10 1 раз, поток 1 занимает SEMAPHORE9 1 раз и SEMAPHORE10 1 раз. Поток 2 ждет освобождения одного из двух семафоров. 6. Создать 2 потока: поток 1 и поток 2. Создать 2 семафора с именами «SEMAPHORE3» (максимальное значением счетчика 4) и «SEMAPHORE4» (максимальное значением счетчика 2). Поток 1 занимает SEMAPHORE3 2 раза и SEMAPHORE4 1 раз, поток 2 занимает SEMAPHORE3 2 раза и SEMAPHORE4 1 раз. Главный поток ждет освобождения одного из двух семафоров. 7. Создать 2 потока: поток 1 и поток 2. Создать семафор с именем «SEMAPHORE1» с максимальным значением счетчика 5. Поток 1 занимает семафор 2 раза, поток 2 занимает семафор 3 раза. Главный поток ждет освобождения семафора. Через 3 секунды потоки полностью освобождают. 8. Создать 2 потока: поток 1 и поток 2. Создать 2 семафора с именами «SEMAPHORE11» (максимальное значением счетчика 3) и «SEMAPHORE12» (максимальное значением счетчика 5). Главный поток занимает SEMAPHORE11 2 раза и SEMAPHORE12 1 раз, поток 2 занимает SEMAPHORE11 3 раза и SEMAPHORE12 4 раза. Поток 1 ждет освобождения сразу двух семафоров. 9. Создать 2 потока: поток 1 и поток 2. Создать 2 семафора с именами «SEMAPHORE7» (максимальное значением счетчика 3) и «SEMAPHORE8» (максимальное значением счетчика 3). Главный поток занимает SEMAPHORE7 1 раз и SEMAPHORE8 1 раз, поток 1 занимает SEMAPHORE7 2 раза и SEMAPHORE8 2 раза. Поток 2 ждет освобождения одного из двух семафоров. 10. Создать 2 потока: поток 1 и поток 2. Создать семафор с именем «SEMAPHORE15» с максимальным значением счетчика 3. Поток 1 занимает семафор 1 раз, освобождает через 1 секунду, поток 2 занимает семафор 1 раза, освобождает через 2 секунды. Главный поток пытается занять семафор 3 раза. 11. Создать 2 потока: поток 1 и поток 2. Создать 2 семафора с именами «SEMAPHORE13» (максимальное значением счетчика 4) и «SEMAPHORE14» (максимальное значением счетчика 4). Главный поток занимает SEMAPHORE13 3 раза и SEMAPHORE14 2 раза, поток 2 занимает SEMAPHORE13 1 раз и SEMAPHORE14 3 раза. Поток 1 ждет освобождения сразу двух семафоров. 12. Создать 2 потока: поток 1 и поток 2. Создать семафор с именем «SEMAPHORE18» с максимальным значением счетчика 3. Главный поток занимает семафор 1 раз, освобождает через 3 секунды, поток 1 занимает семафор 2 раза, освобождает через 2 секунды. Поток 2 пытается занять семафор 3 раза. Примечание
Пример
Список литературы 1. http://msdn.microsoft.com/en-us/library/windows/apps/ms685129(v=vs.85).aspx 2. Вопросы 1. Дайте определение объекта event, назовите его особенности. 2. Характеризуйте четыре возможные ситуации использования объекта event 3. Перечислите основные функции для работы с объектом event. Не нашли, что искали? Воспользуйтесь поиском:
|