[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Инициализировать и удалить семафор - Пример

Это тот же пример, что и выше, но здесь показан код для
инициализации семафора и его удаления. Этот фрагмент программы
работает так:
32-37     Если   эта    программа    создала    набор    семафоров,
          инициализировать его  в 1.  Как правило,  набор семафоров
          должен быть  удален перед  выходом из программы, если его
          инициализация не удалась, но это здесь не показано.

54-60     Только создатель  набора  семафоров  может  удалить  его.
          Обратите внимание  на использование "пустых" аргументов в
          тех  местах,   где  соответствующие  параметры  системных
          вызовов не  используются. Функция  sleep(3C)  задерживает
          удаление семафора  на 5  секунд, так что другая программа
          может продолжать работу с ним.

Файл: semdemo.c
            ИНИЦИАЛИЗИРОВАТЬ И УДАЛИТЬ СЕМАФОР - ПРИМЕР
 1 #include <unistd.h>
 2 #include <stdlib.h>
 3 #include <sys/types.h>
 4 #include <sys/ipc.h>
 5 #include <sys/sem.h>
 6 #include <stdio.h>
 7 #define  DUMMY  0
 8 #define  COUNT  4
 9
10 main(int argc, char *argv[])
11 {
   ...
32  if (creator) {/* initialize semaphore */
33  if (semctl(semid, 0, SETVAL, 1) == -1) {
34  perror(argv[0]);
35  exit(2);
36  }
37  }
   ...
54  if (creator) {
55  sleep(5);
56  if(semctl(semid,DUMMY,IPC_RMID,DUMMY) == -1) {
57  perror(argv[0]);
58  exit(5);
59  }
60  }
61  return(0);
62 }