Книга: UNIX: взаимодействие процессов
7.8. Резюме
7.8. Резюме
Взаимные исключения (mutual exclusion — mutex) используются для защиты критических областей кода, запрещая его одновременное выполнение несколькими потоками. В некоторых случаях потоку, заблокировавшему взаимное исключение, требуется дождаться выполнения какого-либо условия для выполнения последующих действий. В этом случае используется ожидание сигнала по условной переменной. Условная переменная всегда связывается с каким-либо взаимным исключением. Функция pthread_cond_wait, приостанавливающая работу процесса, разблокирует взаимное исключение перед остановкой работы и заново блокирует его при возобновлении работы процесса спустя некоторое время. Сигнал по условной переменной передается каким-либо другим потоком, и этот поток может разбудить либо только один произвольный поток из множества ожидающих (pthread_cond_signal), либо все их одновременно (pthread_cond_broadcast).
Взаимные исключения и условные переменные могут быть статическими. В этом случае они инициализируются также статически. Они могут быть и динамическими, что требует динамической инициализации. Динамическая инициализация дает возможность указать атрибуты, в частности атрибут совместного использования несколькими процессами, что действенно, если взаимное исключение или условная переменная находится в разделяемой этими процессами памяти.
- 7.1. Введение
- 7.2. Взаимные исключения: установка и снятие блокировки
- 7.3. Схема производитель-потребитель
- 7.4. Блокировка и ожидание
- 7.5. Условные переменные: ожидание и сигнализация
- 7.6. Условные переменные: время ожидания и широковещательная передача
- 7.7. Атрибуты взаимных исключений и условных переменных
- 7.8. Резюме
- Упражнения