Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Семафор (информатика)24 февраля 2011Оглавление: 1. Семафор (информатика) 2. Проблемы семафоров объект, позволяющий войти в заданный участок кода не более чем n потокам. Определение введено Эдсгером Дейкстрой. Определение семафораСемафор это объект, с которым можно выполнить три операции. init: счётчик := n enter: ждать пока счётчик станет больше 0; после этого уменьшить счётчик на единицу. leave: увеличить счётчик на единицу. Предположим, что есть такой участок кода: semaphore.init; ..... ..... void DoSomething { semaphore.enter; ....... semaphore.leave; } Тогда не более пяти потоков могут одновременно выполнять функцию DoSomething. В более сложных семафорах может использоваться очередь; при этом потоки, ожидающие освобождения семафора, будут проходить через семафор именно в том порядке, в котором они вызывали enter. Применение семафоровВот некоторые из проблем, которые могут решать семафоры.
Следующий пример показывает, как наладить поочерёдный доступ к консоли. semaphore.init; Поток 1: semaphore.enter; cout << "Состояние массива: "; for cout << a << ' '; cout << '\n'; semaphore.leave; Поток 2: semaphore.enter; cout << "Нажато Esc.\n"; semaphore.leave; Этот код поможет предотвратить появление листинга наподобие Состояние массива: 1 2 3 Нажато Esc. 4 5 6 Просмотров: 2654
|