Използване на семафори

Четвъртото издание на популярното ръководство обхваща основите на програмирането на Linux. Преглед: Използване на библиотеки C/C ++ иинструменти за разработка, организация на системни повиквания, вход/изход на файлове, взаимодействие на процеси, програмиране с помощта на командната обвивка, създаване на графични потребителски интерфейси с помощта на инструменти GTK + или Qt, използване на сокети и др. Компилацията на програми, свързването им с библиотеки и работа с терминален вход/изход. Дадени са техники за писане на приложения в средите GNOME® и KDE®, съхраняване на данни с помощта на СУБД MySQL® и програми за отстраняване на грешки. Книгата е добре структурирана, което прави ученето лесно и бързо.
За начинаещи програмисти на Linux
Книга: Основи на програмирането на Linux
Използване на семафори
Както можете да видите от предишните раздели, семафорните операции могат да бъдат много сложни. Това не е най-тъжното, защото програмирането на много процеси или нишки с критични секции е много трудна задача сама по себе си, а наличието на сложен софтуерен интерфейс само увеличава интелектуалното натоварване.
За щастие, повечето от задачите, които се нуждаят от семафори, могат да бъдат изпълнени с един двоичен семафор - най-простият тип семафор. В следващия пример (Упражнение 14.1) използвате пълния интерфейс за програмиране, за да създадете много прост P и V интерфейс за двоичен семафор. След това ще използвате този прост интерфейс, за да демонстрирате как работят семафорите.
Експериментирането със семафори ще използва една програма, sem1.c, която можете да стартирате няколко пъти. Ще се използва незадължителен параметър, за да се посочи дали програмата е отговорна за създаването и унищожаването на семафора.
Показването на два различни знака ще означава влизане и излизане от критична секция. Програма, стартирана с параметър, отпечатва X при влизане и излизане от критична секция. Другите екземпляри на изпълняващата се програма ще показват символ O при влизане и излизане от техните критични секции. Тъй като по всяко време само един процес може да влезе в критичния си раздел, всички символи X и O трябва да се появят по двойки.
Упражнение 14.1. Семафори
1. След директивите #include на системата включвате файла semun.h. Той дефинира обединение от тип semun съгласно стандарта X/Open, ако вече не е описано в системния файл sys/sem.h. Това е последвано от прототипите на функциите и глобалната променлива, разположена преди входа на основната функция. Той създава семафор чрез извикване на semget, който връща идентификатора на семафора. Ако програмата е извикана за първи път (т.е. извикана с параметър и argc> 1), set_semvalue се извиква, за да инициализира семафора и променливата op_char е зададена на O .
#include
#include
#include
#include
#include "semun.h"
static int set_semvalue (void);
статична празнота del_semvalue (void);
статичен int semaphore_p (void);
статичен int semaphore_v (void);
статичен int sem_id;
int main (int argc, char * argv []) int i;
int pause_time;
char op_char = 'O';
srand ((неподписан int) getpid ());
sem_id = semget ((key_t) 1234, 1, 0666 | IPC_CREAT);
if (argc> 1) if (! set_semvalue ()) fprintf (stderr, "Неуспешно инициализиране на семафорен");
изход (EXIT_FAILURE);
>
op_char = 'X';
сън (2);
>
2. Следва цикъл, в който влизането и излизането на критичния участък се извършва 10 пъти. Първо извиквате функцията semaphore_p, което кара семафора да изчака, докато тази програма е готова да влезе в критичния раздел.