[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Получение доступа к семафору - Пример

Эта программа показывает использование семафора для доступа к
одиночному разделяемому ресурсу. В этом примере разделяемый ресурс
представляет собой стандартный вывод - экран вашего терминала.
Запускаются две параллельные копии программы в фоновом режиме.
Каждый процесс получает исключительный доступ к терминалу для
вывода неразорванной текстовой строки.
Замечание: текст этой программы используется в нескольких следующих
примерах для демонстрации работы системных вызовов с семафорами.
Фрагмент программы работает следующим образом:
20        Функция ftok(3)  создает ключ доступа к набору семафоров.
          Было бы  полезно  проверить  успешность  создания  ключа,
          сравнив полученное от ftok(3) значение с -1.

21-24     Выполняется попытка  создать семафор.  Если она  успешна,
          переменной creator присваивается 1.

25-31     Иначе, семафор  может быть уже создан, и делается попытка
          получить к  нему доступ.  Если это  не выходит, программа
          печатает сообщение об ошибке и завершается.

...       Отсутствующий код описан в следующих примерах.

Файл: 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       {
12       key_t ipckey;
13       int semid, pid, creator, i;
   ...
20       ipckey = ftok(argv[0], 's');
21       if ((semid = semget(ipckey, 1,
22       IPC_CREAT|IPC_EXCL|0666)) != -1) {
23       creator = 1;
24       }
25       else {
26       if((semid=semget(ipckey,1,0))==-1){
27       perror(argv[0]);
28       exit(1);
29       }
30       creator = 0;
31       }
   ...
62       }