Назад |
Семафоры представляют собой стандартный способ разрешения или запрещения выполнять те или иные действия. Семафор - это обычно целое число. Если оно имеет значение 1 (установлен), то операция запрещена. Если его значение 0, то - разрешена. UNIX позволяет создавать сразу целые массивы семафоров. Они, как и другие объекты IPC, идентифицируются с помощью уникального ключа, задаваемого неотрицательным целым числом.
Для создания массива семафоров используется системный вызов semget( ):
#include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int semget (key_t key, int nsems, int flag);
Здесь:
key | - уникальный ключ объекта IPC; |
nsems | - количество семафоров в массиве; |
flag | - задание режима создания массива семафоров; аналогично параметру flag в msgget( ), только префикс "MSG" заменен "SEM". |
Функция semget( ) возвращает целое число, используемое для доступа к массиву семафоров.
Устанавливать и получать значения элементов, а также управлять состоянием всего массива семафоров можно при помощи системного вызова semctl( ).
#include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int semctl (int semid, int semnum, int cmd, union semun arg);
Здесь:
semid | - идентификатор массива семафоров, возвращаемый функцией semget( ); | ||||||
semnum | - номер изменяемого элемента в массиве; | ||||||
cmd | - выполняемая операция; основные из них
следующие:
|
||||||
arg | - объединение, используемое для передачи данных, необходимых для выполнения операции и/или получения ее результатов; например, ее поле val служит для задания и получения значения семафора. |
Пример работы с массивами семафоров приведен в следующем разделе.