ГЛАВА 7 Взаимные исключения и условные переменные

ГЛАВА 7

Взаимные исключения и условные переменные

7.1. Введение

Эта глава начинается с обсуждения синхронизации — принципов синхронизации действий нескольких программных потоков или процессов. Обычно это требуется для предоставления нескольким потокам или процессам совместного доступа к данным. Взаимные исключения (mutual exclusion — mutex) и условные переменные (conditional variables) являются основными средствами синхронизации.

Взаимные исключения и условные переменные появились в стандарте Posix.1 для программных потоков, и всегда могут быть использованы для синхронизации отдельных потоков одного процесса. Стандарт Posix также разрешает использовать взаимное исключение или условную переменную и для синхронизации нескольких процессов, если это исключение или переменная хранится в области памяти, совместно используемой процессами.

ПРИМЕЧАНИЕ

Эта возможность является дополнительной согласно Posix, но обязательной в Unix 98 (см. табл. 1.3).

В этой главе мы разберем классическую схему производитель-потребитель, используя взаимные исключения и условные переменные. В примере будут использоваться программные потоки, а не процессы, поскольку предоставить потокам общий буфер данных, предполагаемый в этой задаче, легко, а вот создать буфер данных между процессами можно только с помощью одной из форм разделяемой памяти (которая будет описана только в четвертой части книги). Еще одно решение этой задачи, уже с использованием семафоров, появится в главе 10.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Глава 4. Четыре переменные

Из книги Экстремальное программирование автора Бек Кент

Глава 4. Четыре переменные В наших проектах мы пытаемся контролировать четыре переменные – затраты, время, качество и объем работ. Из всех этих переменных наиболее удобной для контроля является объем работ.В данной главе я расскажу вам о модели разработки программного


7.2. Взаимные исключения: установка и снятие блокировки

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

7.2. Взаимные исключения: установка и снятие блокировки Взаимное исключение (mutex) является простейшей формой синхронизации. Оно используется для защиты критической области (critical region), предотвращая одновременное выполнение участка кода несколькими потоками (если взаимное


7.5. Условные переменные: ожидание и сигнализация

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

7.5. Условные переменные: ожидание и сигнализация Взаимное исключение используется для блокирования, а условная переменная — для ожидания. Это два различных средства синхронизации, и оба они нужны. Условная переменная представляет собой переменную типа pthread_cond_t. Для


7.6. Условные переменные: время ожидания и широковещательная передача

Из книги C++. Сборник рецептов автора Диггинс Кристофер

7.6. Условные переменные: время ожидания и широковещательная передача В обычной ситуации pthread_cond_signal запускает выполнение одного потока, ожидающего сигнал по соответствующей условной переменной. В некоторых случаях поток знает, что требуется пробудить несколько других


Взаимные исключения Posix

Из книги Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform автора Кёртен Роб

Взаимные исключения Posix В листинге А.19 приведены глобальные переменные и функция main пpoгрaммы, измеряющей быстродействие взаимных исключений Posix.Листинг А.19. Глобальные переменные и функция main для взаимных исключений Posix//bench/incr_pxmutex1.с1  #include "unpipc.h"2  #define MAXNTHREADS 1003  int


Взаимные исключения Posix между процессами

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Взаимные исключения Posix между процессами Функция main первой программы использует взаимное исключение Posix для обеспечения синхронизации. Текст ее приведен в листинге А.32.Листинг А.32. Функция main для измерения быстродействия взаимных исключений между


7.19. Взаимные преобразования объектов Date, Time и DateTime

Из книги Linux программирование в примерах автора Роббинс Арнольд

7.19. Взаимные преобразования объектов Date, Time и DateTime В Ruby есть три основных класса для работы с датами и временем: Time, Date и DateTime. Опишем их особенности:• Класс Time преимущественно обертывает соответствующие функции из стандартной библиотеки языка С. Они, как правило,


Глава 9 Исключения и безопасность

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Глава 9 Исключения и безопасность 9.0. Введение Данная глава содержит рецепты по обработке исключений в С++. Язык C++ обеспечивает необходимую поддержку работы с исключениями, и, используя некоторые приемы, вы сможете создавать программный код, в котором исключительные


Условные переменные

Из книги Разработка ядра Linux автора Лав Роберт

Условные переменные Условные переменные (или «condvars») очень похожи на ждущие блокировки, которые мы рассматривали выше. В действительности, ждущие блокировки — это надстройка над механизмом условных переменных, и именно поэтому в таблице, иллюстрировавшей использование


Глава 4. Переменные и параметры. Введение.

Из книги автора

Глава 4. Переменные и параметры. Введение. Переменные -- это одна из основ любого языка программирования. Они учавствуют в арифметических операциях, в синтаксическом анализе строк и совершенно необходимы для абстрагирования каких либо величин с помощью символических


Глава 2 Аргументы, опции и переменные окружения

Из книги автора

Глава 2 Аргументы, опции и переменные окружения Первой задачей любой программы обычно является интерпретация опций и аргументов командной строки. Данная глава рассматривает, как программы С (и С++) получают аргументы своей командной строки, описывает стандартные


4.4.6. Сигнальные (условные) переменные

Из книги автора

4.4.6. Сигнальные (условные) переменные Мы узнали, как с помощью исключающего семафора защитить переменную от одновременного доступа со стороны двух и более потоков и как посредством обычного семафора реализовать счетчик обращений, доступный нескольким потокам.


26.7. Взаимные исключения

Из книги автора

26.7. Взаимные исключения Обратите внимание на то, что в листинге 26.8 при завершении выполнения очередного потока в главном цикле уменьшаются на единицу и nconn, и nlefttoread. Мы могли бы поместить оба эти оператора уменьшения в одну функцию do_get_read, что позволило бы каждому потоку


26.8. Условные переменные

Из книги автора

26.8. Условные переменные Взаимное исключение позволяет предотвратить одновременный доступ к совместно используемой (разделяемой) переменной, но для того чтобы перевести поток в состояние ожидания (спящее состояние) до момента выполнения некоторого условия, необходим


Условные переменные

Из книги автора

Условные переменные Условные переменные (conditional variable, completion variable) — простое средство синхронизации между двумя заданиями, которые работают в режиме ядра, когда необходимо, чтобы одно задание послало сигнал другому о том, что произошло некоторое событие. При этом одно