Набор семафоров однозначно определяется положительным числом, называемым (идентификатором набора семафоров semid). У каждого набора семафоров имеется структура данных struct semid_ds, определенная в <sys/sem.h>и состоящая из следующих полей:
struct ipc_perm sem_perm;
{
time_t sem_otime;/* время последней операции */
time_t sem_ctime;/* время последнего изменения */
ushort sem_nsems;/* количество семафоров в наборе */
}sem_perm;
- ipc_perm - это структура, определяющая права доступа к набору семафоров.
- sem_otime - Время последнего вызова функции semop.
- sem_ctime - Время последнего вызова функции semctl, изменившего одно из полей вышеописанной структуры или состояние одного из семафоров этого набора.
- sem_nsems - Количество семафоров в наборе. Каждый семафор в наборе определяется неотрицательным числом диапазона от 0 до sem_nsems-1.
Семафор - это структура типа struct sem, состоящая из следующих полей:
ushort semval;/* значение семафора */
short sempid;/* идентификатор процесса, последний раз работавшего с семафором */
ushort semncnt;/* количество процессов, ожидающих увеличения значения семафора */
ushort semzcnt;/* количество процессов, ожидающих обнуления значения семафора */
- semval - Значение семафора: неотрицательное целое.
- sempid - Идентификатор процесса, последний раз выполнявшего операцию с этим семафором.
- semncnt - Количество процессов, ожидающих увеличения значения semval.
- semznt - Количество процессов, ожидающих обнуления значения semval .