Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

Глава 30. PHP: Функции семафоров и разделяемой памяти

Семафоры («сигнальные функции») — специальные функции, которые применяются для обеспечения эксклюзивного доступа к ресурсам машины или для ограничения числа процессов, которые могут одновременно использовать ресурс. В РНР используются семафоры на основе System V. Поддержка разделяемой памяти также включена. Она может быть использована для обеспечения доступа к глобальным переменным.


ВНИМАНИЕ

Разделяемая память не может осуществить запоминание при одновременном доступе нескольких процессов.


Sem_get

Получение идентификатора семафора. Синтаксис:

int sem_get(int key, int [ max_acquire ], int [ perm ]);

Возвращает положительный идентификатор семафора при успехе или false при ошибке.

Sem_get() возвращает идентификатор, который может быть использован для доступа к семафору System V c указанным ключом. Семафор создается, если необходимо, используя биты доступа, указанные в perm (по умолчанию 0666). Число процессов, которое может быть зафиксировано семафором одновременно, устанавливается в max_acquire (по умолчанию 1). В действительности это значение устанавливается, только если процесс обнаруживает, что он единственный, присоединенный к семафору.

Повторный вызов функции sem_get() с тем же ключом вернет другой идентификатор семафора, но оба идентификатора указывают на один и тот же семафор.

Sem_acquire

Фиксирует семафор. Синтаксис:

int sem_acquire(int sem_identifier);

Возвращает true при успехе, false при ошибке.

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

После обработки запроса, любые семафоры, зафиксированные процессом, но не освобожденные вручную, будут освобождены автоматически с выдачей предупреждения.

Sem_release

Освобождает семафор. Синтаксис:

int sem_release (int sem_identifier);

Возвращает true при успехе и false при ошибке.

sem_release () освобождает семафор, если он зафиксирован в данное время вызывающим процессом, иначе выдается

После освобождения семафора функция sem_acquire() может быть вызвана для его рефиксации.

Shm_attach

Создает или открывает разделяемую память. Синтаксис:

int shm_attach(long key, long memsize, long pern);

Создает или открывает разделяемую память с указанным ключом и размером памяти.

Shm_detach

Отсоединяет от разделяемой памяти. Синтаксис:

int shm_detach(long id);

Отсоединяет от разделяемой памяти с указанным ID, созданным с помощью функции Помните, что разделяемая память все еще существует в Unix-системе и данные все еще присутствуют.

Shm_put_var

Вставляет или обновляет переменную в разделяемой памяти. Синтаксис:

int shm_put_var (int id, long variable_key, mixed variable);

Вставляет или обновляет переменную с указанным variable_key. Все типы переменных (double, long, string, array) поддерживаются. Функция serialize() может быть использована для хранения данных.

Shm_get_var

Считывает переменную с указанным variable_key. Синтаксис:

mixed shm_get_var(int id, long variable_key);

Считывает переменную с указанным variable_key. Переменная все еще присутствует в разделяемой памяти. Функция unserialize() может быть использована для декодирования данных.

Shm_remove_var

Удаляет переменную из разделяемой памяти. Синтаксис:

int shm_remove_var(int id, long variable_key);

Удаляет переменную с указанным из разделяемой

Shm_remove

Удаляет разделяемую память. Синтаксис:

int shm_remove (long key);

Удаляет разделяемую память из Unix-системы. Все данные будут уничтожены.

<< Предыдущий параграф Следующий параграф >>
Оглавление