Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 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.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных