Параллелизм с точки зрения программиста
Параллелизм с точки зрения программиста
Ты выбежал за угол купить вина | Ты вернулся, а вместо дома стена. | Б. Гребенщиков | На палубу вышел, и палубы нет | В глазах у него помутилось. | В.Формулировка задачи
Я что-то не вижу пивного ларька. | Должно быть, его | Успели снести за ночь. | Б. Гребенщиков | Чтобы понять, какие же методики применимы для взаимодействия параллельно исполняющихся нитей, давайте более четко сформулируем задачу. Для этого нам также надо ввести некоторое количество терминов.Примитивы взаимоисключения
В классической работе Г. М. Дейтела [Дейтел 1987] предлагается несколько последовательных усовершенствований механизма взаимоисключений, основанного на флаговых переменных, и как завершающий этап этого анализа приводится алгоритм взаимоисключений Деккера (пример 7.2). | Пример 7.2.Мертвые и живые блокировки
Потом ударили морозы. | Замерзло все, лиса ушла в кредит. | Медведь же вмерз в дупло | И до сих пор глядит. | Б. Гребенщиков | Решив проблему взаимоисключения для одиночных разделяемых ресурсов, мы еще не можем расслабляться.Примитивы синхронизации
Я слышу крик в темноте | Наверное, это сигнал. | В. Бутусов | Посмотрев на примеры 7.2 и 7.4, внимательный читатель должен отметить, что используемая конструкция подозрительно похожа на работу с внешними устройствами в режиме опроса.Семафор Дейкстры. Семафоры и прерывания.
Но когда ты проспишься, скрой свой испуг, | Это был не призрак, эти был только звук. | Это тронулся поезд, на который ты не попадешь. | Б. Гребенщиков | Семафор Дейкстры представляет собой целочисленную переменную, с которой ассоциирована очередь ожидающих нитей.Захват участков файлов
Семафоры удобны при синхронизации доступа к единому ресурсу, такому как принтер или неделимая структура данных. Если же нам нужна синхронизация доступа к ресурсу, имеющему внутреннюю структуру, например к файлу с базой данных, лучше использовать другие методы.Мониторы и серверы транзакций
Захват участков файла теоретически позволяет реализовать любую требуемую структуру взаимоисключения для процессов, работающих с этим файлом. Однако, практически, при работе с файлом большого количества нитей (например, многопользовательской системы управления базами данных), различные нити часто оказываются вынуждены ждать друг друга, что приводит к резкому увеличению времени реакции системы.Гармонически взаимодействующие последовательные потоки
В разд. "Формулировка задачи" мы видели, что проблемы взаимоисключения и синхронизации возникают тогда и только тогда, когда несколько нитей разделяют один и тот же ресурс. Взаимоисключение доступа к разделяемым данным приводит к необходимости вводить дополнительные сущности (семафоры и другие примитивы взаимоисключения и синхронизации) и усложнять программу.Примеры реализаций средств гармонического взаимодействия
Программные каналы Unix | Одним из наиболее типичных средств такого рода является труба (pipe) или программный канал – основное средство взаимодействия между процессами в ОС семейства Unix. В русскоязычной литературе трубы иногда ошибочно называют конвейерами.Системы, управляемые событиями
В начале 70-х годов появилась новая архитектура многозадачных систем довольно резко отличающаяся от вышеописанной модели последовательных процессов. Речь идет о так называемых системах, управляемых событиями (event-driven systems).