ВУЗ:
Составители:
222
Объекты синхронизации можно также разместить в файлах, где они
будут существовать независимо от создавшего их процесса.
Необходимость в синхронизации потоков возникает в следующих
случаях:
1. Если синхронизация – это единственный способ гарантировать
последовательность разделяемых (общих) данных.
2. Если потоки в двух или более процессах могут использовать
единственный объект синхронизации совместно. При этом объект син-
хронизации должен инициализироваться только одним из взаимодей-
ствующих процессов, потому что повторная инициализация объекта
синхронизации устанавливает его в открытое состояние.
3. Если синхронизация может гарантировать достоверность изме-
няющихся данных.
4. Если процесс может отобразить файл и существует поток в этом
процессе, который получает уникальный доступ к записям. Как только
установлена блокировка, любой другой поток в любом процессе, отоб-
ражающем файл, который пытается установить блокировку, блокирует-
ся, пока запись в файл не будет закончена.
8.3 Мьютексы
8.3.1 Функции синхронизации потоков с использованием мьютек-
сов
Для синхронизации потоков с использованием мьютексов исполь-
зуются следующие основные функции:
pthread_mutex_init – инициализирует взаимоисключающую бло-
кировку;
pthread_mutex_destroy – удаляет взаимоисключающую блокиров-
ку;
pthread_mutex_lock – устанавливает блокировку. В случае, если
блокировка была установлена другим потоком, текущий поток останав-
ливается до снятия блокировки другим процессом;
pthread_mutex_unlock – снимает блокировку.
8.3.2 Инициализация и удаление объекта атрибутов мьютекса
Атрибуты мьютекса могут быть связаны с каждым потоком. Чтобы
изменить атрибуты мьютекса по умолчанию, можно объявить и инициа-
лизировать объект атрибутов мьютекса, а затем изменить определенные
значения. Часто атрибуты мьютекса устанавливаются в одном месте в
Страницы
- « первая
- ‹ предыдущая
- …
- 220
- 221
- 222
- 223
- 224
- …
- следующая ›
- последняя »
